123456789_123456789_123456789_123456789_123456789_

Class: Gem::Request::HTTPPool

Do not use. This class is for internal use only.
Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Subclasses:
Inherits: Object
Defined in: lib/rubygems/request/http_pool.rb

Overview

A connection “pool” that only manages one connection for now. Provides thread safe #checkout and #checkin methods. The pool consists of one connection that corresponds to http_args. This class is private, do not use it.

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(http_args, cert_files, proxy_uri, pool_size) ⇒ HTTPPool

[ GitHub ]

  
# File 'lib/rubygems/request/http_pool.rb', line 12

def initialize(http_args, cert_files, proxy_uri, pool_size)
  @http_args  = http_args
  @cert_files = cert_files
  @proxy_uri  = proxy_uri
  @pool_size  = pool_size

  @queue      = Thread::SizedQueue.new @pool_size
  setup_queue
end

Instance Attribute Details

#cert_files (readonly)

[ GitHub ]

  
# File 'lib/rubygems/request/http_pool.rb', line 10

attr_reader :cert_files, :proxy_uri

#proxy_uri (readonly)

[ GitHub ]

  
# File 'lib/rubygems/request/http_pool.rb', line 10

attr_reader :cert_files, :proxy_uri

Instance Method Details

#checkin(connection)

[ GitHub ]

  
# File 'lib/rubygems/request/http_pool.rb', line 26

def checkin(connection)
  @queue.push connection
end

#checkout

[ GitHub ]

  
# File 'lib/rubygems/request/http_pool.rb', line 22

def checkout
  @queue.pop || make_connection
end

#close_all

[ GitHub ]

  
# File 'lib/rubygems/request/http_pool.rb', line 30

def close_all
  until @queue.empty?
    if (connection = @queue.pop(true)) && connection.started?
      connection.finish
    end
  end

  setup_queue
end

#make_connection (private)

[ GitHub ]

  
# File 'lib/rubygems/request/http_pool.rb', line 42

def make_connection
  setup_connection Gem::Request::ConnectionPools.client.new(*@http_args)
end

#setup_connection(connection) (private)

[ GitHub ]

  
# File 'lib/rubygems/request/http_pool.rb', line 46

def setup_connection(connection)
  connection.start
  connection
end

#setup_queue (private)

[ GitHub ]

  
# File 'lib/rubygems/request/http_pool.rb', line 51

def setup_queue
  @pool_size.times { @queue.push(nil) }
end