Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more

In Files

  • rubygems/commands/lock_command.rb

Class/Module Index [+]

Quicksearch

Gem::Commands::LockCommand

Public Class Methods

new() click to toggle source
 
               # File rubygems/commands/lock_command.rb, line 5
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 60
def complain(message)
  if options[:strict] then
    raise Gem::Exception, message
  else
    say "# #{message}"
  end
end
            
execute() click to toggle source
 
               # File rubygems/commands/lock_command.rb, line 68
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? then
      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? then
        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 101
def spec_path(gem_full_name)
  gemspecs = Gem.path.map { |path|
    File.join path, "specifications", "#{gem_full_name}.gemspec"
  }

  gemspecs.find { |path| File.exist? path }
end
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.