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