Parent

Class Index [+]

Quicksearch

Gem::Commands::LockCommand

Public Class Methods

new() click to toggle source

(Not documented)

# File lib/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

(Not documented)

# File lib/rubygems/commands/lock_command.rb, line 61
  def complain(message)
    if options[:strict] then
      raise Gem::Exception, message
    else
      say "# #{message}"
    end
  end
execute() click to toggle source

(Not documented)

# File 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::SourceIndex.load_specification 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 = Gem.source_index.search dep

        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

(Not documented)

# File 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 { |gemspec| File.exist? gemspec }
  end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.