class Pebbles::Command::Help

list commands and display help

Constants

PRIMARY_NAMESPACES

Public Instance Methods

index() click to toggle source
# File lib/pebbles/command/help.rb, line 9
def index
  if command = args.shift
    help_for_command(command)
  else
    help_for_root
  end
end

Private Instance Methods

additional_namespaces() click to toggle source
# File lib/pebbles/command/help.rb, line 54
def additional_namespaces
  (namespaces.values - primary_namespaces)
end
commands() click to toggle source
# File lib/pebbles/command/help.rb, line 34
def commands
  Pebbles::Command.commands
end
commands_for_namespace(name) click to toggle source
# File lib/pebbles/command/help.rb, line 22
def commands_for_namespace(name)
  Pebbles::Command.commands.values.select do |command|
    command[:namespace] == name && command[:command] != name
  end
end
help_for_command(name) click to toggle source
# File lib/pebbles/command/help.rb, line 94
def help_for_command(name)
  if command_alias = Pebbles::Command.command_aliases[name]
    display("Alias: #{name} redirects to #{command_alias}")
    name = command_alias
  end
  if command = commands[name]
    puts "Usage: pebbles #{command[:banner]}"

    if command[:help].strip.length > 0
      help = command[:help].split("\n").reject do |line|
        line =~ /HIDDEN/
      end
      puts help[1..-1].join("\n")
    end
    puts
  end

  namespace_commands = commands_for_namespace(name).reject do |command|
    command[:help] =~ /DEPRECATED/
  end

  if !namespace_commands.empty?
    puts "Additional commands, type \"pebbles help COMMAND\" for more details:"
    puts
    help_for_namespace(name)
    puts
  elsif command.nil?
    error "#{name} is not a pebbles command. See `pebbles help`."
  end
end
help_for_namespace(name) click to toggle source
# File lib/pebbles/command/help.rb, line 81
def help_for_namespace(name)
  namespace_commands = commands_for_namespace(name)

  unless namespace_commands.empty?
    size = longest(namespace_commands.map { |c| c[:banner] })
    namespace_commands.sort_by { |c| c[:banner].to_s }.each do |command|
      next if skip_command?(command)
      command[:summary]
      puts "  %-#{size}s  # %s" % [ command[:banner], command[:summary] ]
    end
  end
end
help_for_root() click to toggle source
# File lib/pebbles/command/help.rb, line 68
def help_for_root
  puts "Usage: pebbles COMMAND [--app APP] [command-specific-options]"
  puts
  puts "Primary help topics, type \"pebbles help TOPIC\" for more details:"
  puts
  summary_for_namespaces(primary_namespaces)
  puts
  puts "Additional topics:"
  puts
  summary_for_namespaces(additional_namespaces)
  puts
end
namespaces() click to toggle source
# File lib/pebbles/command/help.rb, line 28
def namespaces
  namespaces = Pebbles::Command.namespaces
  namespaces.delete("app")
  namespaces
end
primary_namespaces() click to toggle source
# File lib/pebbles/command/help.rb, line 50
def primary_namespaces
  PRIMARY_NAMESPACES.map { |name| namespaces[name] }.compact
end
skip_command?(command) click to toggle source
# File lib/pebbles/command/help.rb, line 44
def skip_command?(command)
  return true if command[:help] =~ /DEPRECATED:/
  return true if command[:help] =~ /^ HIDDEN:/
  false
end
skip_namespace?(ns) click to toggle source
# File lib/pebbles/command/help.rb, line 38
def skip_namespace?(ns)
  return true if ns[:description] =~ /DEPRECATED:/
  return true if ns[:description] =~ /HIDDEN:/
  false
end
summary_for_namespaces(namespaces) click to toggle source
# File lib/pebbles/command/help.rb, line 58
def summary_for_namespaces(namespaces)
  size = longest(namespaces.map { |n| n[:name] })
  namespaces.sort_by {|namespace| namespace[:name]}.each do |namespace|
    next if skip_namespace?(namespace)
    name = namespace[:name]
    namespace[:description]
    puts "  %-#{size}s  # %s" % [ name, namespace[:description] ]
  end
end