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.


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

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:


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

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:


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

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)

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

def installable_platform? # :nodoc:
  Gem::Platform.match_gem? @platform, @name
end

#pretty_print(q) ⇒ Object

:nodoc:


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

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:


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

def source # :nodoc:
  @set.source
end

#specObject

Fetches a Gem::Specification for this APISpecification.


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

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