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.
Register all the subcommands supported by the gem command.
# File lib/rubygems/command_manager.rb, line 25 25: def initialize 26: @commands = {} 27: register_command :build 28: register_command :cert 29: register_command :check 30: register_command :cleanup 31: register_command :contents 32: register_command :dependency 33: register_command :environment 34: register_command :fetch 35: register_command :generate_index 36: register_command :help 37: register_command :install 38: register_command :list 39: register_command :lock 40: register_command :mirror 41: register_command :outdated 42: register_command :pristine 43: register_command :query 44: register_command :rdoc 45: register_command :search 46: register_command :server 47: register_command :sources 48: register_command :specification 49: register_command :stale 50: register_command :uninstall 51: register_command :unpack 52: register_command :update 53: register_command :which 54: end
Return the registered command from the command name.
# File lib/rubygems/command_manager.rb, line 62 62: def [](command_name) 63: command_name = command_name.intern 64: return nil if @commands[command_name].nil? 65: @commands[command_name] ||= load_and_instantiate(command_name) 66: end
Return a list of all command names (as strings).
# File lib/rubygems/command_manager.rb, line 69 69: def command_names 70: @commands.keys.collect {|key| key.to_s}.sort 71: end
# File lib/rubygems/command_manager.rb, line 109 109: def find_command(cmd_name) 110: possibilities = find_command_possibilities(cmd_name) 111: if possibilities.size > 1 112: raise "Ambiguous command #{cmd_name} matches [#{possibilities.join(', ')}]" 113: end 114: if possibilities.size < 1 115: raise "Unknown command #{cmd_name}" 116: end 117: 118: self[possibilities.first] 119: end
# File lib/rubygems/command_manager.rb, line 121 121: def find_command_possibilities(cmd_name) 122: len = cmd_name.length 123: self.command_names.select { |n| cmd_name == n[0,len] } 124: end
# File lib/rubygems/command_manager.rb, line 86 86: def process_args(args) 87: args = args.to_str.split(/\s+/) if args.respond_to?(:to_str) 88: if args.size == 0 89: say Gem::Command::HELP 90: terminate_interaction(1) 91: end 92: case args[0] 93: when '-h', '--help' 94: say Gem::Command::HELP 95: terminate_interaction(0) 96: when '-v', '--version' 97: say Gem::RubyGemsVersion 98: terminate_interaction(0) 99: when /^-/ 100: alert_error "Invalid option: #{args[0]}. See 'gem --help'." 101: terminate_interaction(1) 102: else 103: cmd_name = args.shift.downcase 104: cmd = find_command(cmd_name) 105: cmd.invoke(*args) 106: end 107: end
Register the command object.
# File lib/rubygems/command_manager.rb, line 57 57: def register_command(command_obj) 58: @commands[command_obj] = false 59: end
Run the config specified by args.
# File lib/rubygems/command_manager.rb, line 74 74: def run(args) 75: process_args(args) 76: rescue StandardError, Timeout::Error => ex 77: alert_error "While executing gem ... (#{ex.class})\n #{ex.to_s}" 78: ui.errs.puts "\t#{ex.backtrace.join "\n\t"}" if 79: Gem.configuration.backtrace 80: terminate_interaction(1) 81: rescue Interrupt 82: alert_error "Interrupted" 83: terminate_interaction(1) 84: end