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.
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.
Sets default instance variables for the specification.
# File ruby-3.1.2/lib/rubygems/resolver/specification.rb, line 59 def initialize @dependencies = nil @name = nil @platform = nil @set = nil @source = nil @version = nil @required_ruby_version = Gem::Requirement.default @required_rubygems_version = Gem::Requirement.default end
# File ruby-3.1.2/lib/rubygems/resolver/specification.rb, line 107 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 ruby-3.1.2/lib/rubygems/resolver/specification.rb, line 82 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 ruby-3.1.2/lib/rubygems/resolver/specification.rb, line 95 def install(options = {}) require_relative '../installer' gem = download options installer = Gem::Installer.at gem, options yield installer if block_given? @spec = installer.install end