Class: Gem::CompactIndexClient::HTTPFetcher
| Relationships & Source Files | |
| Inherits: | Object |
| Defined in: | lib/rubygems/compact_index_client/http_fetcher.rb |
Overview
Fetches compact index files relative to base_uri using
Gem::RemoteFetcher's connection infrastructure (proxy, TLS,
connection pooling). Implements the fetcher interface expected by
::Gem::CompactIndexClient: #call(path, headers) returning a
::Gem::Net::HTTP response.
Constant Summary
-
REDIRECT_LIMIT =
private
# File 'lib/rubygems/compact_index_client/http_fetcher.rb', line 1210
Class Method Summary
Instance Method Summary
Constructor Details
.new(base_uri, remote_fetcher = Gem::RemoteFetcher.fetcher) ⇒ HTTPFetcher
# File 'lib/rubygems/compact_index_client/http_fetcher.rb', line 15
def initialize(base_uri, remote_fetcher = Gem::RemoteFetcher.fetcher) base_uri = base_uri.to_s base_uri += "/" unless base_uri.end_with?("/") @base_uri = Gem::URI(base_uri) @remote_fetcher = remote_fetcher end
Instance Method Details
#call(path, headers = {})
[ GitHub ]# File 'lib/rubygems/compact_index_client/http_fetcher.rb', line 22
def call(path, headers = {}) fetch(@base_uri + path, headers, REDIRECT_LIMIT) end
#fetch(uri, headers, redirects_remaining) (private)
[ GitHub ]# File 'lib/rubygems/compact_index_client/http_fetcher.rb', line 28
def fetch(uri, headers, redirects_remaining) response = @remote_fetcher.request(uri, Gem::Net::HTTP::Get) do |req| headers.each {|name, value| req[name] = value } end case response when Gem::Net::HTTPSuccess, Gem::Net::HTTPNotModified response when Gem::Net::HTTPMovedPermanently, Gem::Net::HTTPFound, Gem::Net::HTTPSeeOther, Gem::Net::HTTPTemporaryRedirect, Gem::Net::HTTPPermanentRedirect raise Gem::RemoteFetcher::FetchError.new("too many redirects", uri) if redirects_remaining.zero? location = response["Location"] raise Gem::RemoteFetcher::FetchError.new("redirecting but no redirect location was given", uri) unless location fetch(uri + location, headers, redirects_remaining - 1) else raise Gem::RemoteFetcher::FetchError.new("bad response #{response.} #{response.code}", uri) end end