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

#full_name, #install

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
# 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 = 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:



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

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

#installable_platform?Boolean

:nodoc:

Returns:

  • (Boolean)


37
38
39
# File 'lib/rubygems/resolver/api_specification.rb', line 37

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

#pretty_print(q) ⇒ Object

:nodoc:



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/rubygems/resolver/api_specification.rb', line 41

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:



74
75
76
# File 'lib/rubygems/resolver/api_specification.rb', line 74

def source # :nodoc:
  @set.source
end

#specObject

Fetches a Gem::Specification for this APISpecification.



65
66
67
68
69
70
71
72
# File 'lib/rubygems/resolver/api_specification.rb', line 65

def spec # :nodoc:
  @spec ||=
    begin
      tuple = Gem::NameTuple.new @name, @version, @platform

      source.fetch_spec tuple
    end
end