class Gem::Resolver::Specification

A Resolver::Specification contains a subset of the information contained in a Gem::Specification. Only the information necessary for dependency resolution in the resolver is included.

Attributes

The content address of this specification.

The time this gem version was published, when the source provides it (compact index v2), nil otherwise.

The dependencies of the gem for this specification

The name of the gem for this specification

The platform this gem works on.

The required_ruby_version constraint for this specification.

The required_ruby_version constraint for this specification.

The set this specification came from.

The source for this specification

The Gem::Specification for this Resolver::Specification.

Implementers, note that install updates @spec, so be sure to cache the Gem::Specification in @spec when overriding.

The version of the gem for this specification.

Public Class Methods

Sets default instance variables for the specification.

# File lib/rubygems/resolver/specification.rb, line 71
def initialize
  @created_at   = nil
  @dependencies = nil
  @name         = nil
  @platform     = nil
  @set          = nil
  @source       = nil
  @version      = nil
  @required_ruby_version = Gem::Requirement.default
  @required_rubygems_version = Gem::Requirement.default
  @content_address = nil
end

Public Instance Methods

# File lib/rubygems/resolver/specification.rb, line 123
def download(options)
  dir = options[:install_dir] || Gem.dir

  Gem.ensure_gem_subdirectories dir

  source.download spec, dir
end

The name and version of the specification.

Unlike Gem::Specification#full_name, the platform is not included.

# File lib/rubygems/resolver/specification.rb, line 96
def full_name
  "#{@name}-#{@version}"
end

Installs this specification using the Gem::Installer options. The install method yields a Gem::Installer instance, which indicates the gem will be installed, or nil, which indicates the gem is already installed.

After installation spec is updated to point to the just-installed specification.

# File lib/rubygems/resolver/specification.rb, line 109
def install(options = {})
  require_relative "../installer"

  gem = download options

  installer = Gem::Installer.at gem, options.merge(
    content_address: (spec.content_address if Gem::ContentAddress.content_addressed?(spec, validate_ruby_abi: false))
  )

  yield installer if block_given?

  @spec = installer.install
end

Returns true if this specification is installable on this platform.

# File lib/rubygems/resolver/specification.rb, line 134
def installable_platform?
  Gem::Platform.match_spec? spec
end