Class: Gem::Guardian::RubygemsClient

Inherits:
Object
  • Object
show all
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

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.message}"
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