Class | Gem::CommandManager |
In: |
lib/rubygems/command_manager.rb
|
Parent: | Object |
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.
Register all the subcommands supported by the gem command.
# File lib/rubygems/command_manager.rb, line 44 44: def initialize 45: @commands = {} 46: register_command :build 47: register_command :cert 48: register_command :check 49: register_command :cleanup 50: register_command :contents 51: register_command :dependency 52: register_command :environment 53: register_command :fetch 54: register_command :generate_index 55: register_command :help 56: register_command :install 57: register_command :list 58: register_command :lock 59: register_command :mirror 60: register_command :outdated 61: register_command :owner 62: register_command :pristine 63: register_command :push 64: register_command :query 65: register_command :rdoc 66: register_command :search 67: register_command :server 68: register_command :sources 69: register_command :specification 70: register_command :stale 71: register_command :uninstall 72: register_command :unpack 73: register_command :update 74: register_command :which 75: end
Return the registered command from the command name.
# File lib/rubygems/command_manager.rb, line 87 87: def [](command_name) 88: command_name = command_name.intern 89: return nil if @commands[command_name].nil? 90: @commands[command_name] ||= load_and_instantiate(command_name) 91: end
Return a sorted list of all command names (as strings).
# File lib/rubygems/command_manager.rb, line 96 96: def command_names 97: @commands.keys.collect {|key| key.to_s}.sort 98: end
# File lib/rubygems/command_manager.rb, line 138 138: def find_command(cmd_name) 139: possibilities = find_command_possibilities cmd_name 140: if possibilities.size > 1 then 141: raise "Ambiguous command #{cmd_name} matches [#{possibilities.join(', ')}]" 142: elsif possibilities.size < 1 then 143: raise "Unknown command #{cmd_name}" 144: end 145: 146: self[possibilities.first] 147: end
# File lib/rubygems/command_manager.rb, line 149 149: def find_command_possibilities(cmd_name) 150: len = cmd_name.length 151: 152: command_names.select { |n| cmd_name == n[0, len] } 153: end
# File lib/rubygems/command_manager.rb, line 115 115: def process_args(args) 116: args = args.to_str.split(/\s+/) if args.respond_to?(:to_str) 117: if args.size == 0 118: say Gem::Command::HELP 119: terminate_interaction(1) 120: end 121: case args[0] 122: when '-h', '--help' 123: say Gem::Command::HELP 124: terminate_interaction(0) 125: when '-v', '--version' 126: say Gem::VERSION 127: terminate_interaction(0) 128: when /^-/ 129: alert_error "Invalid option: #{args[0]}. See 'gem --help'." 130: terminate_interaction(1) 131: else 132: cmd_name = args.shift.downcase 133: cmd = find_command(cmd_name) 134: cmd.invoke(*args) 135: end 136: end
Register the Symbol command as a gem command.
# File lib/rubygems/command_manager.rb, line 80 80: def register_command(command) 81: @commands[command] = false 82: end
Run the config specified by args.
# File lib/rubygems/command_manager.rb, line 103 103: def run(args) 104: process_args(args) 105: rescue StandardError, Timeout::Error => ex 106: alert_error "While executing gem ... (#{ex.class})\n #{ex.to_s}" 107: ui.errs.puts "\t#{ex.backtrace.join "\n\t"}" if 108: Gem.configuration.backtrace 109: terminate_interaction(1) 110: rescue Interrupt 111: alert_error "Interrupted" 112: terminate_interaction(1) 113: end