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
Source
# 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
Calls superclass method
Gem::Resolver::Specification::new
Source
# 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 @created_at = parse_created_at(api_data.dig(:requirements, :created_at))&.freeze 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
Public Instance Methods
Source
# File lib/rubygems/resolver/api_specification.rb, line 52 def hash @set.hash ^ @name.hash ^ @version.hash ^ @platform.hash end
Private Instance Methods
Source
# File lib/rubygems/resolver/api_specification.rb, line 115 def parse_created_at(value) value = value.first if value.is_a?(Array) return unless value.is_a?(String) require "time" begin Time.iso8601(value) rescue ArgumentError nil end end