class Gem::Resolver::APISpecification - rubygems: Ruby Standard Library Documentation

# 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) click to toggle source
Calls superclass method `Gem::Resolver::Specification::new`

    # File 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) click to toggle source

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 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() click to toggle source

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