Class: Gem::Resolver::APISpecification
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
Specification
|
|
Instance Chain:
self,
Specification
|
|
Inherits: |
Gem::Resolver::Specification
|
Defined in: | lib/rubygems/resolver/api_specification.rb |
Overview
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.
Class Method Summary
- .new(set, api_data) ⇒ APISpecification constructor
Specification
- Inherited
.new | Sets default instance variables for the specification. |
Instance Attribute Summary
- #installable_platform? ⇒ Boolean readonly Internal use only
Specification
- Inherited
#dependencies | The dependencies of the gem for this specification. |
#installable_platform? | Returns true if this specification is installable on this platform. |
#name | The name of the gem for this specification. |
#platform | The platform this gem works on. |
#required_ruby_version | The required_ruby_version constraint for this specification. |
#required_rubygems_version | The required_ruby_version constraint for this specification. |
#set | The set this specification came from. |
#source | The source for this specification. |
#spec | The |
#version | The version of the gem for this specification. |
#local? |
Instance Method Summary
- #hash
-
#initialize(set, api_data) ⇒ APISpecification
constructor
Creates an
APISpecification
for the givenset
from the rubygems.orgapi_data
. - #==(other) Internal use only
- #fetch_development_dependencies Internal use only
- #pretty_print(q) Internal use only
- #source Internal use only
-
#spec
Internal use only
Fetches a
::Gem::Specification
for thisAPISpecification
.
Specification
- Inherited
#download, | |
#full_name | The name and version of the specification. |
#install | Installs this specification using the |
#fetch_development_dependencies | Fetches development dependencies if the source does not provide them by default (see |
Constructor Details
.new(set, api_data) ⇒ APISpecification
# File 'lib/rubygems/resolver/api_specification.rb', line 13
def self.new(set, api_data) cache_key = [set, api_data] cache = @@cache[cache_key] return cache if cache @@cache[cache_key] = super end
#initialize(set, api_data) ⇒ APISpecification
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
.
# File 'lib/rubygems/resolver/api_specification.rb', line 27
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
Instance Attribute Details
#installable_platform? ⇒ Boolean
(readonly)
# File 'lib/rubygems/resolver/api_specification.rb', line 60
def installable_platform? # :nodoc: Gem::Platform.match_gem? @platform, @name end
Instance Method Details
#==(other)
# File 'lib/rubygems/resolver/api_specification.rb', line 42
def ==(other) # :nodoc: self.class === other and @set == other.set and @name == other.name and @version == other.version and @platform == other.platform end
#fetch_development_dependencies
#hash
[ GitHub ]# File 'lib/rubygems/resolver/api_specification.rb', line 50
def hash @set.hash ^ @name.hash ^ @version.hash ^ @platform.hash end
#pretty_print(q)
# File 'lib/rubygems/resolver/api_specification.rb', line 64
def pretty_print(q) # :nodoc: q.group 2, '[APISpecification', ']' do q.breakable q.text "name: #{name}" q.breakable q.text "version: #{version}" q.breakable q.text "platform: #{platform}" q.breakable q.text 'dependencies:' q.breakable q.pp @dependencies q.breakable q.text "set uri: #{@set.dep_uri}" end end
#source
# File 'lib/rubygems/resolver/api_specification.rb', line 101
def source # :nodoc: @set.source end
#spec
Fetches a ::Gem::Specification
for this APISpecification
.
# File 'lib/rubygems/resolver/api_specification.rb', line 88
def spec # :nodoc: @spec ||= begin tuple = Gem::NameTuple.new @name, @version, @platform source.fetch_spec tuple rescue Gem::RemoteFetcher::FetchError raise if @original_platform == @platform tuple = Gem::NameTuple.new @name, @version, @original_platform source.fetch_spec tuple end end