class Gem::Commands::HelpCommand
def execute
def execute arg = options[:args][0] _, help = SUBCOMMANDS.find do |command,| begins? command, arg end if help if Symbol === help send help else say help end return end if options[:help] show_help elsif arg show_command_help arg else say Gem::Command::HELP end end
def initialize
def initialize super 'help', "Provide help on the 'gem' command" @command_manager = Gem::CommandManager.instance end
def show_command_help(command_name) # :nodoc:
def show_command_help(command_name) # :nodoc: command_name = command_name.downcase possibilities = @command_manager.find_command_possibilities command_name if possibilities.size == 1 command = @command_manager[possibilities.first] command.invoke("--help") elsif possibilities.size > 1 alert_warning "Ambiguous command #{command_name} (#{possibilities.join(', ')})" else alert_warning "Unknown command #{command_name}. Try: gem help commands" end end
def show_commands # :nodoc:
def show_commands # :nodoc: out = [] out << "GEM commands are:" out << nil margin_width = 4 desc_width = @command_manager.command_names.map {|n| n.size }.max + 4 summary_width = 80 - margin_width - desc_width wrap_indent = ' ' * (margin_width + desc_width) format = "#{' ' * margin_width}%-#{desc_width}s%s" @command_manager.command_names.each do |cmd_name| command = @command_manager[cmd_name] next if command.deprecated? summary = if command command.summary else "[No command found for #{cmd_name}]" end summary = wrap(summary, summary_width).split "\n" out << sprintf(format, cmd_name, summary.shift) until summary.empty? do out << "#{wrap_indent}#{summary.shift}" end end out << nil out << "For help on a particular command, use 'gem help COMMAND'." out << nil out << "Commands may be abbreviated, so long as they are unambiguous." out << "e.g. 'gem i rake' is short for 'gem install rake'." say out.join("\n") end
def usage # :nodoc:
def usage # :nodoc: "#{program_name} ARGUMENT" end