class Gem::Commands::LockCommand - Documentation for Ruby 4.0
Description: Documentation for the Gem::Commands::LockCommand class
Keywords: ruby,class,Gem::Commands::LockCommand

🔍

No recent searches

# class Gem::Commands::LockCommand

### Public Class Methods

new ()
Source

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

Calls superclass method `Gem::Command::new`

### Public Instance Methods

complain (message)
Source

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

execute ()
Source

    # 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::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)
Source

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