Class: LibGems::CommandManager
- Inherits:
-
Object
- Object
- LibGems::CommandManager
- Includes:
- UserInteraction
- Defined in:
- lib/libgems/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 LibGems::CommandManager instance, like this:
# file rubygems_plugin.rb
require 'libgems/command_manager'
class LibGems::Commands::EditCommand < LibGems::Command
# ...
end
LibGems::CommandManager.instance.register_command :edit
See LibGems::Command for instructions on writing gem commands.
Class Method Summary collapse
-
.instance ⇒ Object
Return the authoritative instance of the command manager.
Instance Method Summary collapse
-
#[](command_name) ⇒ Object
Return the registered command from the 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.
- #process_args(args) ⇒ Object
-
#register_command(command) ⇒ Object
Register the Symbol
command
as a gem command. -
#run(args) ⇒ Object
Run the config specified by
args
.
Methods included from UserInteraction
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.
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/libgems/command_manager.rb', line 44 def initialize @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 end |
Class Method Details
.instance ⇒ Object
Return the authoritative instance of the command manager.
37 38 39 |
# File 'lib/libgems/command_manager.rb', line 37 def self.instance @command_manager ||= new end |
Instance Method Details
#[](command_name) ⇒ Object
Return the registered command from the command name.
87 88 89 90 91 |
# File 'lib/libgems/command_manager.rb', line 87 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).
96 97 98 |
# File 'lib/libgems/command_manager.rb', line 96 def command_names @commands.keys.collect {|key| key.to_s}.sort end |
#find_command(cmd_name) ⇒ Object
138 139 140 141 142 143 144 145 146 147 |
# File 'lib/libgems/command_manager.rb', line 138 def find_command(cmd_name) possibilities = find_command_possibilities cmd_name if possibilities.size > 1 then raise "Ambiguous command #{cmd_name} matches [#{possibilities.join(', ')}]" elsif possibilities.size < 1 then raise "Unknown command #{cmd_name}" end self[possibilities.first] end |
#find_command_possibilities(cmd_name) ⇒ Object
149 150 151 152 153 |
# File 'lib/libgems/command_manager.rb', line 149 def find_command_possibilities(cmd_name) len = cmd_name.length command_names.select { |n| cmd_name == n[0, len] } end |
#process_args(args) ⇒ Object
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/libgems/command_manager.rb', line 115 def process_args(args) args = args.to_str.split(/\s+/) if args.respond_to?(:to_str) if args.size == 0 say LibGems::Command::HELP terminate_interaction(1) end case args[0] when '-h', '--help' say LibGems::Command::HELP terminate_interaction(0) when '-v', '--version' say "#{LibGems::NAME} #{LibGems::LIBGEMS_VERSION} (RubyGems #{LibGems::VERSION})" terminate_interaction(0) when /^-/ alert_error "Invalid option: #{args[0]}. See 'gem --help'." terminate_interaction(1) else cmd_name = args.shift.downcase cmd = find_command(cmd_name) cmd.invoke(*args) end end |
#register_command(command) ⇒ Object
Register the Symbol command
as a gem command.
80 81 82 |
# File 'lib/libgems/command_manager.rb', line 80 def register_command(command) @commands[command] = false end |
#run(args) ⇒ Object
Run the config specified by args
.
103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/libgems/command_manager.rb', line 103 def run(args) process_args(args) rescue StandardError, Timeout::Error => ex alert_error "While executing gem ... (#{ex.class})\n #{ex.to_s}" ui.errs.puts "\t#{ex.backtrace.join "\n\t"}" if LibGems.configuration.backtrace terminate_interaction(1) rescue Interrupt alert_error "Interrupted" terminate_interaction(1) end |