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'
Gem::CommandManager.instance.register_command :edit
You should put the implementation of your command in rubygems/commands.
# file rubygems/commands/edit_command.rb
class Gem::Commands::EditCommand < Gem::Command
# ...
end
See Gem::Command
for instructions on writing gem commands.
- #
- C
- F
- I
- N
- P
- R
- U
Constants
ALIAS_COMMANDS | = | { "i" => "install", "login" => "signin", "logout" => "signout", }.freeze |
Class Public methods
instance() Link
Return the authoritative instance of the command manager.
new() Link
Register all the subcommands supported by the gem command.
reset() Link
Reset the authoritative instance of the command manager.
Instance Public methods
[](command_name) Link
Returns a Command instance for command_name
command_names() Link
Return a sorted list of all command names as strings.
find_alias_command(cmd_name) Link
find_command(cmd_name) Link
# File ruby/lib/rubygems/command_manager.rb, line 198 def find_command(cmd_name) cmd_name = find_alias_command cmd_name possibilities = find_command_possibilities cmd_name if possibilities.size > 1 raise Gem::CommandLineError, "Ambiguous command #{cmd_name} matches [#{possibilities.join(", ")}]" elsif possibilities.empty? raise Gem::UnknownCommandError.new(cmd_name) end self[possibilities.first] end
find_command_possibilities(cmd_name) Link
instance() Link
Returns self. Allows a CommandManager
instance to stand in for the class itself.
process_args(args, build_args=nil) Link
# File ruby/lib/rubygems/command_manager.rb, line 168 def process_args(args, build_args=nil) if args.empty? say Gem::Command::HELP terminate_interaction 1 end case args.first when "-h", "--help" then say Gem::Command::HELP terminate_interaction 0 when "-v", "--version" then say Gem::VERSION terminate_interaction 0 when "-C" then args.shift start_point = args.shift if Dir.exist?(start_point) Dir.chdir(start_point) { invoke_command(args, build_args) } else alert_error clean_text("#{start_point} isn't a directory.") terminate_interaction 1 end when /^-/ then alert_error clean_text("Invalid option: #{args.first}. See 'gem --help'.") terminate_interaction 1 else invoke_command(args, build_args) end end
run(args, build_args=nil) Link
Run the command specified by args
.
# File ruby/lib/rubygems/command_manager.rb, line 151 def run(args, build_args=nil) process_args(args, build_args) rescue StandardError, Gem::Timeout::Error => ex if ex.respond_to?(:detailed_message) msg = ex.detailed_message(highlight: false).sub(/\A(.*?)(?: \(.+?\))/) { $1 } else msg = ex.message end alert_error clean_text("While executing gem ... (#{ex.class})\n #{msg}") ui.backtrace ex terminate_interaction(1) rescue Interrupt alert_error clean_text("Interrupted") terminate_interaction(1) end