Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
The command manager registers and installs all the individual sub-commands supported by the gem command.
Extra commands can be provided by writing a rubygems_plugin.rb file in an installed gem. You should register your command against the Gem::CommandManager instance, like this:
# file rubygems_plugin.rb require 'rubygems/command_manager' class Gem::Commands::EditCommand < Gem::Command # ... end Gem::CommandManager.instance.register_command :edit
See Gem::Command for instructions on writing gem commands.
Return the authoritative instance of the command manager.
# File rubygems/command_manager.rb, line 36
def self.instance
@command_manager ||= new
end
Register all the subcommands supported by the gem command.
# File rubygems/command_manager.rb, line 50
def initialize
require 'timeout'
@commands = {}
register_command :build
register_command :cert
register_command :check
register_command :cleanup
register_command :contents
register_command :dependency
register_command :environment
register_command :fetch
register_command :generate_index
register_command :help
register_command :install
register_command :list
register_command :lock
register_command :outdated
register_command :owner
register_command :pristine
register_command :push
register_command :query
register_command :rdoc
register_command :search
register_command :server
register_command :sources
register_command :specification
register_command :stale
register_command :uninstall
register_command :unpack
register_command :update
register_command :which
end
Return the registered command from the command name.
# File rubygems/command_manager.rb, line 100
def [](command_name)
command_name = command_name.intern
return nil if @commands[command_name].nil?
@commands[command_name] ||= load_and_instantiate(command_name)
end
Return a sorted list of all command names (as strings).
# File rubygems/command_manager.rb, line 109
def command_names
@commands.keys.collect {|key| key.to_s}.sort
end
# File rubygems/command_manager.rb, line 151
def find_command(cmd_name)
possibilities = find_command_possibilities cmd_name
if possibilities.size > 1 then
raise "Ambiguous command #{cmd_name} matches [#{possibilities.join(', ')}]"
elsif possibilities.size < 1 then
raise "Unknown command #{cmd_name}"
end
self[possibilities.first]
end
# File rubygems/command_manager.rb, line 162
def find_command_possibilities(cmd_name)
len = cmd_name.length
command_names.select { |n| cmd_name == n[0, len] }
end
# File rubygems/command_manager.rb, line 128
def process_args(args)
args = args.to_str.split(/\s+/) if args.respond_to?(:to_str)
if args.size == 0
say Gem::Command::HELP
terminate_interaction(1)
end
case args[0]
when '-h', '--help'
say Gem::Command::HELP
terminate_interaction(0)
when '-v', '--version'
say Gem::VERSION
terminate_interaction(0)
when /^-/
alert_error "Invalid option: #{args[0]}. See 'gem --help'."
terminate_interaction(1)
else
cmd_name = args.shift.downcase
cmd = find_command(cmd_name)
cmd.invoke(*args)
end
end
Register the Symbol command as a gem command.
# File rubygems/command_manager.rb, line 86
def register_command(command)
@commands[command] = false
end
Run the config specified by args.
# File rubygems/command_manager.rb, line 116
def run(args)
process_args(args)
rescue StandardError, Timeout::Error => ex
alert_error "While executing gem ... (#{ex.class})\n #{ex.to_s}"
ui.errs.puts "\t#{ex.backtrace.join "\n\t"}" if
Gem.configuration.backtrace
terminate_interaction(1)
rescue Interrupt
alert_error "Interrupted"
terminate_interaction(1)
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.