Class: Gem::Request::HTTPPool

Inherits:
Object
  • Object
show all
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.

Direct Known Subclasses

HTTPSPool

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(http_args, cert_files, proxy_uri, pool_size) ⇒ HTTPPool

Returns a new instance of HTTPPool.



12
13
14
15
16
17
18
19
20
# 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_filesObject (readonly)

:nodoc:



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

def cert_files
  @cert_files
end

#proxy_uriObject (readonly)

:nodoc:



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

def proxy_uri
  @proxy_uri
end

Instance Method Details

#checkin(connection) ⇒ Object



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

def checkin(connection)
  @queue.push connection
end

#checkoutObject



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

def checkout
  @queue.pop || make_connection
end

#close_allObject



30
31
32
33
34
35
36
37
38
# 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