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 :uninstall 50: register_command :unpack 51: register_command :update 52: register_command :which 53: end
Return the registered command from the command name.
# File lib/rubygems/command_manager.rb, line 61 61: def [](command_name) 62: command_name = command_name.intern 63: return nil if @commands[command_name].nil? 64: @commands[command_name] ||= load_and_instantiate(command_name) 65: end
Return a list of all command names (as strings).
# File lib/rubygems/command_manager.rb, line 68 68: def command_names 69: @commands.keys.collect {|key| key.to_s}.sort 70: end
# File lib/rubygems/command_manager.rb, line 108 108: def find_command(cmd_name) 109: possibilities = find_command_possibilities(cmd_name) 110: if possibilities.size > 1 111: raise "Ambiguous command #{cmd_name} matches [#{possibilities.join(', ')}]" 112: end 113: if possibilities.size < 1 114: raise "Unknown command #{cmd_name}" 115: end 116: 117: self[possibilities.first] 118: end
# File lib/rubygems/command_manager.rb, line 120 120: def find_command_possibilities(cmd_name) 121: len = cmd_name.length 122: self.command_names.select { |n| cmd_name == n[0,len] } 123: end
# File lib/rubygems/command_manager.rb, line 85 85: def process_args(args) 86: args = args.to_str.split(/\s+/) if args.respond_to?(:to_str) 87: if args.size == 0 88: say Gem::Command::HELP 89: terminate_interaction(1) 90: end 91: case args[0] 92: when '-h', '--help' 93: say Gem::Command::HELP 94: terminate_interaction(0) 95: when '-v', '--version' 96: say Gem::RubyGemsVersion 97: terminate_interaction(0) 98: when /^-/ 99: alert_error "Invalid option: #{args[0]}. See 'gem --help'." 100: terminate_interaction(1) 101: else 102: cmd_name = args.shift.downcase 103: cmd = find_command(cmd_name) 104: cmd.invoke(*args) 105: end 106: end
Register the command object.
# File lib/rubygems/command_manager.rb, line 56 56: def register_command(command_obj) 57: @commands[command_obj] = false 58: end
Run the config specificed by args.
# File lib/rubygems/command_manager.rb, line 73 73: def run(args) 74: process_args(args) 75: rescue StandardError, Timeout::Error => ex 76: alert_error "While executing gem ... (#{ex.class})\n #{ex.to_s}" 77: ui.errs.puts "\t#{ex.backtrace.join "\n\t"}" if 78: Gem.configuration.backtrace 79: terminate_interaction(1) 80: rescue Interrupt 81: alert_error "Interrupted" 82: terminate_interaction(1) 83: end