Class: Bundler::GemRemoteFetcher
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
Gem::RemoteFetcher
|
|
Instance Chain:
self,
Gem::RemoteFetcher
|
|
Inherits: |
Gem::RemoteFetcher
|
Defined in: | lib/bundler/gem_remote_fetcher.rb |
Overview
Adds support for setting custom HTTP headers when fetching gems from the server.
TODO: Get rid of this when and if gemstash only supports RubyGems versions that contain github.com/rubygems/rubygems/commit/3db265cc20b2f813.
Instance Attribute Summary
- #headers rw
Instance Method Summary
-
#fetch_http(uri, last_modified = nil, head = false, depth = 0)
Extracted from RubyGems 2.4.
Instance Attribute Details
#headers (rw)
[ GitHub ]# File 'lib/bundler/gem_remote_fetcher.rb', line 12
attr_accessor :headers
Instance Method Details
#fetch_http(uri, last_modified = nil, head = false, depth = 0)
Extracted from RubyGems 2.4.
# File 'lib/bundler/gem_remote_fetcher.rb', line 15
def fetch_http(uri, last_modified = nil, head = false, depth = 0) fetch_type = head ? Net::HTTP::Head : Net::HTTP::Get # beginning of change response = request uri, fetch_type, last_modified do |req| headers.each {|k, v| req.add_field(k, v) } if headers end # end of change case response when Net::HTTPOK, Net::HTTPNotModified then response.uri = uri if response.respond_to? :uri head ? response : response.body when Net::HTTPMovedPermanently, Net::HTTPFound, Net::HTTPSeeOther, Net::HTTPTemporaryRedirect then raise FetchError.new("too many redirects", uri) if depth > 10 location = URI.parse response["Location"] if https?(uri) && !https?(location) raise FetchError.new("redirecting to non-https resource: #{location}", uri) end fetch_http(location, last_modified, head, depth + 1) else raise FetchError.new("bad response #{response.} #{response.code}", uri) end end