In Files

  • rubygems/request.rb
  • rubygems/request/connection_pools.rb
  • rubygems/request/http_pool.rb
  • rubygems/request/https_pool.rb

Class/Module Index [+]

Quicksearch

Gem::Request

Public Class Methods

configure_connection_for_https(connection, cert_files) click to toggle source
 
               # File rubygems/request.rb, line 46
def self.configure_connection_for_https(connection, cert_files)
  require 'net/https'
  connection.use_ssl = true
  connection.verify_mode =
    Gem.configuration.ssl_verify_mode || OpenSSL::SSL::VERIFY_PEER
  store = OpenSSL::X509::Store.new

  if Gem.configuration.ssl_client_cert then
    pem = File.read Gem.configuration.ssl_client_cert
    connection.cert = OpenSSL::X509::Certificate.new pem
    connection.key = OpenSSL::PKey::RSA.new pem
  end

  store.set_default_paths
  cert_files.each do |ssl_cert_file|
    store.add_file ssl_cert_file
  end
  if Gem.configuration.ssl_ca_cert
    if File.directory? Gem.configuration.ssl_ca_cert
      store.add_path Gem.configuration.ssl_ca_cert
    else
      store.add_file Gem.configuration.ssl_ca_cert
    end
  end
  connection.cert_store = store
  connection
rescue LoadError => e
  raise unless (e.respond_to?(:path) && e.path == 'openssl') ||
               e.message =~ / -- openssl$/

  raise Gem::Exception.new(
          'Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources')
end
            
get_cert_files() click to toggle source
 
               # File rubygems/request.rb, line 41
def self.get_cert_files
  pattern = File.expand_path("./ssl_certs/*.pem", File.dirname(__FILE__))
  Dir.glob(pattern)
end
            
get_proxy_from_env(scheme = 'http') click to toggle source

Returns a proxy URI for the given scheme if one is set in the environment variables.

 
               # File rubygems/request.rb, line 116
def self.get_proxy_from_env scheme = 'http'
  _scheme = scheme.downcase
  _SCHEME = scheme.upcase
  env_proxy = ENV["#{_scheme}_proxy"] || ENV["#{_SCHEME}_PROXY"]

  no_env_proxy = env_proxy.nil? || env_proxy.empty?

  return get_proxy_from_env 'http' if no_env_proxy and _scheme != 'http'
  return :no_proxy                 if no_env_proxy

  uri = URI(Gem::UriFormatter.new(env_proxy).normalize)

  if uri and uri.user.nil? and uri.password.nil? then
    user     = ENV["#{_scheme}_proxy_user"] || ENV["#{_SCHEME}_PROXY_USER"]
    password = ENV["#{_scheme}_proxy_pass"] || ENV["#{_SCHEME}_PROXY_PASS"]

    uri.user     = Gem::UriFormatter.new(user).escape
    uri.password = Gem::UriFormatter.new(password).escape
  end

  uri
end
            
new(uri, request_class, last_modified, pool) click to toggle source
 
               # File rubygems/request.rb, line 28
def initialize(uri, request_class, last_modified, pool)
  @uri = uri
  @request_class = request_class
  @last_modified = last_modified
  @requests = Hash.new 0
  @user_agent = user_agent

  @connection_pool = pool
end
            

Public Instance Methods

cert_files() click to toggle source
 
               # File rubygems/request.rb, line 39
def cert_files; @connection_pool.cert_files; end
            
connection_for(uri) click to toggle source

Creates or an HTTP connection based on uri, or retrieves an existing connection, using a proxy if needed.

 
               # File rubygems/request.rb, line 84
def connection_for(uri)
  @connection_pool.checkout
rescue defined?(OpenSSL::SSL) ? OpenSSL::SSL::SSLError : Errno::EHOSTDOWN,
       Errno::EHOSTDOWN => e
  raise Gem::RemoteFetcher::FetchError.new(e.message, uri)
end
            
fetch() click to toggle source
 
               # File rubygems/request.rb, line 91
def fetch
  request = @request_class.new @uri.request_uri

  unless @uri.nil? || @uri.user.nil? || @uri.user.empty? then
    request.basic_auth Gem::UriFormatter.new(@uri.user).unescape,
                       Gem::UriFormatter.new(@uri.password).unescape
  end

  request.add_field 'User-Agent', @user_agent
  request.add_field 'Connection', 'keep-alive'
  request.add_field 'Keep-Alive', '30'

  if @last_modified then
    request.add_field 'If-Modified-Since', @last_modified.httpdate
  end

  yield request if block_given?

  perform_request request
end
            
proxy_uri() click to toggle source
 
               # File rubygems/request.rb, line 38
def proxy_uri; @connection_pool.proxy_uri; end
            
reset(connection) click to toggle source

Resets HTTP connection connection.

 
               # File rubygems/request.rb, line 213
def reset(connection)
  @requests.delete connection.object_id

  connection.finish
  connection.start
end
            
user_agent() click to toggle source
 
               # File rubygems/request.rb, line 220
def user_agent
  ua = "RubyGems/#{Gem::VERSION} #{Gem::Platform.local}"

  ruby_version = RUBY_VERSION
  ruby_version += 'dev' if RUBY_PATCHLEVEL == -1

  ua << " Ruby/#{ruby_version} (#{RUBY_RELEASE_DATE}"
  if RUBY_PATCHLEVEL >= 0 then
    ua << " patchlevel #{RUBY_PATCHLEVEL}"
  elsif defined?(RUBY_REVISION) then
    ua << " revision #{RUBY_REVISION}"
  end
  ua << ")"

  ua << " #{RUBY_ENGINE}" if defined?(RUBY_ENGINE) and RUBY_ENGINE != 'ruby'

  ua
end
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.