Class: Gem::Request::ConnectionPools
Do not use. This class is for internal use only.
Relationships & Source Files | |
Inherits: | Object |
Defined in: | lib/rubygems/request/connection_pools.rb |
Class Attribute Summary
- .client rw
Class Method Summary
- .new(proxy_uri, cert_files) ⇒ ConnectionPools constructor
Instance Method Summary
- #close_all
- #pool_for(uri)
-
#get_no_proxy_from_env
private
Returns list of no_proxy entries (if any) from the environment.
- #https?(uri) ⇒ Boolean private
- #net_http_args(uri, proxy_uri) private
- #no_proxy?(host, env_no_proxy) ⇒ Boolean private
Constructor Details
.new(proxy_uri, cert_files) ⇒ ConnectionPools
# File 'lib/rubygems/request/connection_pools.rb', line 12
def initialize proxy_uri, cert_files @proxy_uri = proxy_uri @cert_files = cert_files @pools = {} @pool_mutex = Mutex.new end
Class Attribute Details
.client (rw)
[ GitHub ]# File 'lib/rubygems/request/connection_pools.rb', line 9
attr_accessor :client
Instance Method Details
#close_all
[ GitHub ]# File 'lib/rubygems/request/connection_pools.rb', line 32
def close_all @pools.each_value {|pool| pool.close_all} end
#get_no_proxy_from_env (private)
Returns list of no_proxy entries (if any) from the environment
# File 'lib/rubygems/request/connection_pools.rb', line 41
def get_no_proxy_from_env env_no_proxy = ENV['no_proxy'] || ENV['NO_PROXY'] return [] if env_no_proxy.nil? or env_no_proxy.empty? env_no_proxy.split(/\s*,\s*/) end
#https?(uri) ⇒ Boolean
(private)
# File 'lib/rubygems/request/connection_pools.rb', line 49
def https? uri uri.scheme.downcase == 'https' end
#net_http_args(uri, proxy_uri) (private)
[ GitHub ]# File 'lib/rubygems/request/connection_pools.rb', line 64
def net_http_args uri, proxy_uri # URI::Generic#hostname was added in ruby 1.9.3, use it if exists, otherwise # don't support IPv6 literals and use host. hostname = uri.respond_to?(:hostname) ? uri.hostname : uri.host net_http_args = [hostname, uri.port] no_proxy = get_no_proxy_from_env if proxy_uri and not no_proxy?(hostname, no_proxy) then proxy_hostname = proxy_uri.respond_to?(:hostname) ? proxy_uri.hostname : proxy_uri.host net_http_args + [ proxy_hostname, proxy_uri.port, Gem::UriFormatter.new(proxy_uri.user).unescape, Gem::UriFormatter.new(proxy_uri.password).unescape, ] elsif no_proxy? hostname, no_proxy then net_http_args + [nil, nil] else net_http_args end end
#no_proxy?(host, env_no_proxy) ⇒ Boolean
(private)
#pool_for(uri)
[ GitHub ]# File 'lib/rubygems/request/connection_pools.rb', line 19
def pool_for uri http_args = net_http_args(uri, @proxy_uri) key = http_args + [https?(uri)] @pool_mutex.synchronize do @pools[key] ||= if https? uri then Gem::Request::HTTPSPool.new(http_args, @cert_files, @proxy_uri) else Gem::Request::HTTPPool.new(http_args, @cert_files, @proxy_uri) end end end