class Gem::Commands::LockCommand
Public Class Methods
new()
click to toggle source
Calls superclass method
Gem::Command::new
# File 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
Public Instance Methods
complain(message)
click to toggle source
# File rubygems/commands/lock_command.rb, line 61 def complain(message) if options[:strict] raise Gem::Exception, message else say "# #{message}" end end
execute()
click to toggle source
# File 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
spec_path(gem_full_name)
click to toggle source
# File 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