Class: Gem::Resolver::APISpecification
- Inherits:
 - 
      Specification
      
        
- Object
 - Specification
 - Gem::Resolver::APISpecification
 
 
- 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.
Constant Summary collapse
- @@cache =
          
We assume that all instances of this class are immutable; so avoid duplicated generation for performance.
 {}
Instance Attribute Summary
Attributes inherited from Specification
#dependencies, #name, #platform, #required_ruby_version, #required_rubygems_version, #set, #version
Class Method Summary collapse
Instance Method Summary collapse
- 
  
    
      #==(other)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
:nodoc:.
 - 
  
    
      #fetch_development_dependencies  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
:nodoc:.
 - #hash ⇒ Object
 - 
  
    
      #initialize(set, api_data)  ⇒ APISpecification 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    
Creates an APISpecification for the given
setfrom the rubygems.orgapi_data. - 
  
    
      #installable_platform?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
:nodoc:.
 - 
  
    
      #pretty_print(q)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
:nodoc:.
 - 
  
    
      #source  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
:nodoc:.
 - 
  
    
      #spec  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Fetches a Gem::Specification for this APISpecification.
 
Methods inherited from Specification
#download, #full_name, #install, #local?
Constructor Details
#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.
      28 29 30 31 32 33 34 35 36 37 38 39 40 41  | 
    
      # 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  | 
  
Class Method Details
.new(set, api_data) ⇒ Object
      14 15 16 17 18 19  | 
    
      # 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  | 
  
Instance Method Details
#==(other) ⇒ Object
:nodoc:
      43 44 45 46 47 48 49  | 
    
      # File 'lib/rubygems/resolver/api_specification.rb', line 43 def ==(other) # :nodoc: self.class === other && @set == other.set && @name == other.name && @version == other.version && @platform == other.platform end  | 
  
#fetch_development_dependencies ⇒ Object
:nodoc:
      55 56 57 58 59  | 
    
      # File 'lib/rubygems/resolver/api_specification.rb', line 55 def fetch_development_dependencies # :nodoc: spec = source.fetch_spec Gem::NameTuple.new @name, @version, @platform @dependencies = spec.dependencies end  | 
  
#hash ⇒ Object
      51 52 53  | 
    
      # File 'lib/rubygems/resolver/api_specification.rb', line 51 def hash @set.hash ^ @name.hash ^ @version.hash ^ @platform.hash end  | 
  
#installable_platform? ⇒ Boolean
:nodoc:
      61 62 63  | 
    
      # File 'lib/rubygems/resolver/api_specification.rb', line 61 def installable_platform? # :nodoc: Gem::Platform.match_gem? @platform, @name end  | 
  
#pretty_print(q) ⇒ Object
:nodoc:
      65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84  | 
    
      # File 'lib/rubygems/resolver/api_specification.rb', line 65 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 ⇒ Object
:nodoc:
      102 103 104  | 
    
      # File 'lib/rubygems/resolver/api_specification.rb', line 102 def source # :nodoc: @set.source end  | 
  
#spec ⇒ Object
Fetches a Gem::Specification for this APISpecification.
      89 90 91 92 93 94 95 96 97 98 99 100  | 
    
      # File 'lib/rubygems/resolver/api_specification.rb', line 89 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  |