Class: Gem::Resolver::APISpecification

Inherits:
Specification show all
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.

Instance Attribute Summary

Attributes inherited from Specification

#dependencies, #name, #platform, #set, #version

Instance Method Summary collapse

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.



17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/rubygems/resolver/api_specification.rb', line 17

def initialize(set, api_data)
  super()

  @set = set
  @name = api_data[:name]
  @version = Gem::Version.new api_data[:number]
  @platform = Gem::Platform.new api_data[:platform]
  @original_platform = api_data[:platform]
  @dependencies = api_data[:dependencies].map do |name, ver|
    Gem::Dependency.new name, ver.split(/\s*,\s*/)
  end
end

Instance Method Details

#==(other) ⇒ Object

:nodoc:



30
31
32
33
34
35
36
37
# File 'lib/rubygems/resolver/api_specification.rb', line 30

def ==(other) # :nodoc:
  self.class === other and
    @set          == other.set and
    @name         == other.name and
    @version      == other.version and
    @platform     == other.platform and
    @dependencies == other.dependencies
end

#fetch_development_dependenciesObject

:nodoc:



39
40
41
42
43
# File 'lib/rubygems/resolver/api_specification.rb', line 39

def fetch_development_dependencies # :nodoc:
  spec = source.fetch_spec Gem::NameTuple.new @name, @version, @platform

  @dependencies = spec.dependencies
end

#installable_platform?Boolean

:nodoc:

Returns:

  • (Boolean)


45
46
47
# File 'lib/rubygems/resolver/api_specification.rb', line 45

def installable_platform? # :nodoc:
  Gem::Platform.match @platform
end

#pretty_print(q) ⇒ Object

:nodoc:



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/rubygems/resolver/api_specification.rb', line 49

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

#sourceObject

:nodoc:



86
87
88
# File 'lib/rubygems/resolver/api_specification.rb', line 86

def source # :nodoc:
  @set.source
end

#specObject

Fetches a Gem::Specification for this APISpecification.



73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/rubygems/resolver/api_specification.rb', line 73

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