class Gem::Resolver::APISpecification

Represents a specification retrieved via the rubygems.org API.

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

Public Class Methods

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

Creates an APISpecification for the given set from the rubygems.org api_data.

See guides.rubygems.org/rubygems-org-api/#misc-methods for the format of the api_data.

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

  @set = set
  @name = api_data[:name]
  @version = Gem::Version.new(api_data[:number]).freeze
  @platform = Gem::Platform.new(api_data[:platform]).freeze
  @original_platform = api_data[:platform].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
end

Public Instance Methods

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