Class: Gem::Guardian::RubygemsClient
- Inherits:
-
Object
- Object
- Gem::Guardian::RubygemsClient
- Defined in:
- lib/gem/guardian/rubygems_client.rb
Overview
Reads checksum metadata from RubyGems.org and downloads gem artifacts.
Constant Summary collapse
- DEFAULT_HOST =
Default RubyGems.org endpoint used by the client.
"https://rubygems.org"
Instance Method Summary collapse
-
#download_gem(dependency, destination) ⇒ Object
Downloads the .gem file for +dependency+ into +destination+.
-
#expected_sha256(dependency) ⇒ Object
Returns the expected SHA256 checksum for +dependency+.
-
#initialize(host: DEFAULT_HOST, http: Net::HTTP) ⇒ RubygemsClient
constructor
A new instance of RubygemsClient.
Constructor Details
#initialize(host: DEFAULT_HOST, http: Net::HTTP) ⇒ RubygemsClient
Returns a new instance of RubygemsClient.
14 15 16 17 |
# File 'lib/gem/guardian/rubygems_client.rb', line 14 def initialize(host: DEFAULT_HOST, http: Net::HTTP) @host = host.delete_suffix("/") @http = http end |
Instance Method Details
#download_gem(dependency, destination) ⇒ Object
Downloads the .gem file for +dependency+ into +destination+.
32 33 34 35 36 37 38 |
# File 'lib/gem/guardian/rubygems_client.rb', line 32 def download_gem(dependency, destination) body = get("/downloads/#{dependency.gem_filename}") File.binwrite(destination, body) destination rescue StandardError => e raise ArtifactFetchError, "Could not fetch #{dependency.gem_filename}: #{e.}" end |
#expected_sha256(dependency) ⇒ Object
Returns the expected SHA256 checksum for +dependency+.
20 21 22 23 24 25 26 27 28 29 |
# File 'lib/gem/guardian/rubygems_client.rb', line 20 def expected_sha256(dependency) version = matching_version(dependency) sha = version && version_checksum(version) if blank?(sha) raise ChecksumNotFound, "No SHA256 found for #{dependency.name} #{dependency.version} #{dependency.platform}" end sha.downcase end |