The LockSpecification
comes from a lockfile (Gem::RequestSet::Lockfile
).
A LockSpecification's dependency information is pre-filled from the lockfile.
# File ruby-3.1.2/lib/rubygems/resolver/lock_specification.rb, line 11 def initialize(set, name, version, sources, platform) super() @name = name @platform = platform @set = set @source = sources.first @sources = sources @version = version @dependencies = [] @spec = nil end
This is a null install as a locked specification is considered installed. options
are ignored.
# File ruby-3.1.2/lib/rubygems/resolver/lock_specification.rb, line 29 def install(options = {}) destination = options[:install_dir] || Gem.dir if File.exist? File.join(destination, 'specifications', spec.spec_name) yield nil return end super end
A specification constructed from the lockfile is returned
# File ruby-3.1.2/lib/rubygems/resolver/lock_specification.rb, line 72 def spec @spec ||= Gem::Specification.find do |spec| spec.name == @name and spec.version == @version end @spec ||= Gem::Specification.new do |s| s.name = @name s.version = @version s.platform = @platform s.dependencies.concat @dependencies end end