Class Methods
::
lib/rubygems/commands/lock_command.rb
View on GitHub
# File tmp/rubies/ruby-3.4.0-preview1/lib/rubygems/commands/lock_command.rb, line 6
def initialize
super "lock", "Generate a lockdown list of gems",
strict: false
add_option "-s", "--[no-]strict",
"fail if unable to satisfy a dependency" do |strict, options|
options[:strict] = strict
end
end
No documentation available
Instance Methods
lib/rubygems/commands/lock_command.rb
View on GitHub
# File tmp/rubies/ruby-3.4.0-preview1/lib/rubygems/commands/lock_command.rb, line 61
def complain(message)
if options[:strict]
raise Gem::Exception, message
else
say "# #{message}"
end
end
No documentation available
#
lib/rubygems/commands/lock_command.rb
View on GitHub
# File tmp/rubies/ruby-3.4.0-preview1/lib/rubygems/commands/lock_command.rb, line 69
def execute
say "require 'rubygems'"
locked = {}
pending = options[:args]
until pending.empty? do
full_name = pending.shift
spec = Gem::Specification.load spec_path(full_name)
if spec.nil?
complain "Could not find gem #{full_name}, try using the full name"
next
end
say "gem '#{spec.name}', '= #{spec.version}'" unless locked[spec.name]
locked[spec.name] = true
spec.runtime_dependencies.each do |dep|
next if locked[dep.name]
candidates = dep.matching_specs
if candidates.empty?
complain "Unable to satisfy '#{dep}' from currently installed gems"
else
pending << candidates.last.full_name
end
end
end
end
No documentation available
lib/rubygems/commands/lock_command.rb
View on GitHub
# File tmp/rubies/ruby-3.4.0-preview1/lib/rubygems/commands/lock_command.rb, line 102
def spec_path(gem_full_name)
gemspecs = Gem.path.map do |path|
File.join path, "specifications", "#{gem_full_name}.gemspec"
end
gemspecs.find {|path| File.exist? path }
end
No documentation available