Class: Gem::Resolver::IndexSpecification

Inherits:
Specification show all
Defined in:
lib/rubygems/resolver/index_specification.rb

Overview

Represents a possible Specification object returned from IndexSet. Used to delay needed to download full Specification objects when only the name and version are needed.

Instance Attribute Summary

Attributes inherited from Specification

#name, #platform, #set, #source, #version

Instance Method Summary collapse

Methods inherited from Specification

#download, #fetch_development_dependencies, #full_name, #install, #installable_platform?, #local?

Constructor Details

#initialize(set, name, version, source, platform) ⇒ IndexSpecification

An IndexSpecification is created from the index format described in ‘gem help generate_index`.

The set contains other specifications for this (URL) source.

The name, version and platform are the name, version and platform of the gem.



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

def initialize(set, name, version, source, platform)
  super()

  @set = set
  @name = name
  @version = version
  @source = source
  @platform = Gem::Platform.new(platform.to_s)
  @original_platform = platform.to_s

  @spec = nil
end

Instance Method Details

#==(other) ⇒ Object



59
60
61
62
63
64
# File 'lib/rubygems/resolver/index_specification.rb', line 59

def ==(other)
  self.class === other &&
    @name == other.name &&
    @version == other.version &&
    @platform == other.platform
end

#dependenciesObject

The dependencies of the gem for this specification



34
35
36
# File 'lib/rubygems/resolver/index_specification.rb', line 34

def dependencies
  spec.dependencies
end

#hashObject



66
67
68
# File 'lib/rubygems/resolver/index_specification.rb', line 66

def hash
  @name.hash ^ @version.hash ^ @platform.hash
end

#inspectObject

:nodoc:



70
71
72
# File 'lib/rubygems/resolver/index_specification.rb', line 70

def inspect # :nodoc:
  format("#<%s %s source %s>", self.class, full_name, @source)
end

#pretty_print(q) ⇒ Object

:nodoc:



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/rubygems/resolver/index_specification.rb', line 74

def pretty_print(q) # :nodoc:
  q.group 2, "[Index specification", "]" do
    q.breakable
    q.text full_name

    unless @platform == Gem::Platform::RUBY
      q.breakable
      q.text @platform.to_s
    end

    q.breakable
    q.text "source "
    q.pp @source
  end
end

#required_ruby_versionObject

The required_ruby_version constraint for this specification

A fallback is included because when generated, some marshalled specs have it set to nil.



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

def required_ruby_version
  spec.required_ruby_version || Gem::Requirement.default
end

#required_rubygems_versionObject

The required_rubygems_version constraint for this specification

A fallback is included because the original version of the specification API didn’t include that field, so some marshalled specs in the index have it set to nil.



55
56
57
# File 'lib/rubygems/resolver/index_specification.rb', line 55

def required_rubygems_version
  spec.required_rubygems_version || Gem::Requirement.default
end

#specObject

Fetches a Gem::Specification for this IndexSpecification from the #source.



93
94
95
96
97
98
99
100
# File 'lib/rubygems/resolver/index_specification.rb', line 93

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

      @source.fetch_spec tuple
    end
end