class Gem::Resolver::APISpecification

Represents a specification retrieved via the Compact Index API.

This is used to avoid loading the full Specification object when all we need is the name, version, and dependencies.

Public Class Methods

Calls superclass method Gem::Resolver::Specification::new
# File lib/rubygems/resolver/api_specification.rb, line 16
def self.new(set, api_data)
  cache_key = [set, api_data]
  cache = @@cache[cache_key]
  return cache if cache
  @@cache[cache_key] = super
end

Creates an APISpecification for the given set from the Compact Index API api_data.

See guides.rubygems.org/rubygems-org-compact-index-api for the format of the api_data.

Calls superclass method Gem::Resolver::Specification::new
# File lib/rubygems/resolver/api_specification.rb, line 30
def initialize(set, api_data)
  super()

  @set = set
  @name = api_data[:name]
  @version = Gem::Version.new(api_data[:number]).freeze
  @dependencies = api_data[:dependencies].map do |name, ver|
    Gem::Dependency.new(name, ver.split(/\s*,\s*/)).freeze
  end.freeze
  @required_ruby_version = Gem::Requirement.new(api_data.dig(:requirements, :ruby)).freeze
  @required_rubygems_version = Gem::Requirement.new(api_data.dig(:requirements, :rubygems)).freeze
  @created_at = parse_created_at(api_data.dig(:requirements, :created_at))&.freeze
  assign_platform(api_data)
end

Public Instance Methods

# File lib/rubygems/resolver/api_specification.rb, line 54
def hash
  @set.hash ^ @name.hash ^ @version.hash ^ @platform.hash ^ @content_address.hash
end