Class: Bundler::GemRemoteFetcher
- Inherits:
-
Gem::RemoteFetcher
- Object
- Gem::RemoteFetcher
- Bundler::GemRemoteFetcher
- 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 collapse
-
#headers ⇒ Object
Returns the value of attribute headers.
Instance Method Summary collapse
-
#fetch_http(uri, last_modified = nil, head = false, depth = 0) ⇒ Object
Extracted from RubyGems 2.4.
Instance Attribute Details
#headers ⇒ Object
Returns the value of attribute headers.
11 12 13 |
# File 'lib/bundler/gem_remote_fetcher.rb', line 11 def headers @headers end |
Instance Method Details
#fetch_http(uri, last_modified = nil, head = false, depth = 0) ⇒ Object
Extracted from RubyGems 2.4.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/bundler/gem_remote_fetcher.rb', line 14 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 |