Class: Gem::CommandManager
- Inherits:
-
Object
- Object
- Gem::CommandManager
- Includes:
- UserInteraction
- Defined in:
- lib/rubygems/command_manager.rb
Overview
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.
Class Method Summary collapse
-
.instance ⇒ Object
Return the authoritative instance of the command manager.
-
.reset ⇒ Object
Reset the authoritative instance of the command manager.
Instance Method Summary collapse
-
#[](command_name) ⇒ Object
Returns a Command instance for
command_name
. -
#command_names ⇒ Object
Return a sorted list of all command names as strings.
- #find_command(cmd_name) ⇒ Object
- #find_command_possibilities(cmd_name) ⇒ Object
-
#initialize ⇒ CommandManager
constructor
Register all the subcommands supported by the gem command.
-
#instance ⇒ Object
Returns self.
- #process_args(args, build_args = nil) ⇒ Object
-
#register_command(command, obj = false) ⇒ Object
Register the Symbol
command
as a gem command. -
#run(args, build_args = nil) ⇒ Object
Run the command specified by
args
. -
#unregister_command(command) ⇒ Object
Unregister the Symbol
command
as a gem command.
Methods included from UserInteraction
#alert, #alert_error, #alert_warning, #ask, #ask_for_password, #ask_yes_no, #choose_from_list, #say, #terminate_interaction
Methods included from DefaultUserInteraction
ui, #ui, ui=, #ui=, use_ui, #use_ui
Constructor Details
#initialize ⇒ CommandManager
Register all the subcommands supported by the gem command.
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/rubygems/command_manager.rb', line 61 def initialize require 'timeout' @commands = {} register_command :build register_command :cert register_command :check register_command :cleanup register_command :contents register_command :dependency register_command :environment register_command :fetch register_command :generate_index register_command :help register_command :install register_command :list register_command :lock register_command :mirror register_command :outdated register_command :owner register_command :pristine register_command :push register_command :query register_command :rdoc register_command :search register_command :server register_command :sources register_command :specification register_command :stale register_command :uninstall register_command :unpack register_command :update register_command :which register_command :yank end |
Class Method Details
.instance ⇒ Object
Return the authoritative instance of the command manager.
39 40 41 |
# File 'lib/rubygems/command_manager.rb', line 39 def self.instance @command_manager ||= new end |
.reset ⇒ Object
Reset the authoritative instance of the command manager.
54 55 56 |
# File 'lib/rubygems/command_manager.rb', line 54 def self.reset @command_manager = nil end |
Instance Method Details
#[](command_name) ⇒ Object
Returns a Command instance for command_name
113 114 115 116 117 |
# File 'lib/rubygems/command_manager.rb', line 113 def [](command_name) command_name = command_name.intern return nil if @commands[command_name].nil? @commands[command_name] ||= load_and_instantiate(command_name) end |
#command_names ⇒ Object
Return a sorted list of all command names as strings.
122 123 124 |
# File 'lib/rubygems/command_manager.rb', line 122 def command_names @commands.keys.collect {|key| key.to_s}.sort end |
#find_command(cmd_name) ⇒ Object
174 175 176 177 178 179 180 181 182 183 184 185 |
# File 'lib/rubygems/command_manager.rb', line 174 def find_command(cmd_name) possibilities = find_command_possibilities cmd_name if possibilities.size > 1 then raise Gem::CommandLineError, "Ambiguous command #{cmd_name} matches [#{possibilities.join(', ')}]" elsif possibilities.empty? then raise Gem::CommandLineError, "Unknown command #{cmd_name}" end self[possibilities.first] end |
#find_command_possibilities(cmd_name) ⇒ Object
187 188 189 190 191 192 193 194 195 |
# File 'lib/rubygems/command_manager.rb', line 187 def find_command_possibilities(cmd_name) len = cmd_name.length found = command_names.select { |name| cmd_name == name[0, len] } exact = found.find { |name| name == cmd_name } exact ? [exact] : found end |
#instance ⇒ Object
Returns self. Allows a CommandManager instance to stand in for the class itself.
47 48 49 |
# File 'lib/rubygems/command_manager.rb', line 47 def instance self end |
#process_args(args, build_args = nil) ⇒ Object
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
# File 'lib/rubygems/command_manager.rb', line 149 def process_args(args, build_args=nil) args = args.to_str.split(/\s+/) if args.respond_to?(:to_str) if args.empty? then 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 /^-/ then alert_error "Invalid option: #{args.first}. See 'gem --help'." terminate_interaction 1 else cmd_name = args.shift.downcase cmd = find_command cmd_name cmd.invoke_with_build_args args, build_args end end |
#register_command(command, obj = false) ⇒ Object
Register the Symbol command
as a gem command.
99 100 101 |
# File 'lib/rubygems/command_manager.rb', line 99 def register_command(command, obj=false) @commands[command] = obj end |
#run(args, build_args = nil) ⇒ Object
Run the command specified by args
.
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/rubygems/command_manager.rb', line 129 def run(args, build_args=nil) process_args(args, build_args) rescue StandardError, Timeout::Error => ex alert_error "While executing gem ... (#{ex.class})\n #{ex.to_s}" ui.backtrace ex if Gem.configuration.really_verbose and \ ex.kind_of?(Gem::Exception) and ex.source_exception e = ex.source_exception ui.errs.puts "Because of: (#{e.class})\n #{e.to_s}" ui.backtrace e end terminate_interaction(1) rescue Interrupt alert_error "Interrupted" terminate_interaction(1) end |
#unregister_command(command) ⇒ Object
Unregister the Symbol command
as a gem command.
106 107 108 |
# File 'lib/rubygems/command_manager.rb', line 106 def unregister_command(command) @commands.delete command end |