module Sickle::Help

Public Class Methods

included(base) click to toggle source
# File lib/sickle.rb, line 108
def self.included(base)
  base.class_eval do
    desc "Display help"
    def help(command = nil)
      if command
        __display_help_for_command(command)
      else
        __display_help
      end
    end
  end
end

Public Instance Methods

__display_command_usage(name, command) click to toggle source
# File lib/sickle.rb, line 144
def __display_command_usage(name, command)
  params = command.meth.parameters.map do |(r, p)|
    r == :req ? p.upcase : "[#{p.upcase}]"
  end

  ["#{name.gsub("_", "-")} #{params.join(" ")}", command]
end
__display_global_options() click to toggle source
# File lib/sickle.rb, line 170
def __display_global_options
  unless self.class.__global_options.empty?
    puts
    puts "GLOBAL OPTIONS:"
    self.class.__global_options.sort.each do |name, opt|
      puts __display_option(opt)
    end
  end
end
__display_help() click to toggle source
# File lib/sickle.rb, line 152
def __display_help
  puts "USAGE:"
  puts "  #{$0} COMMAND [ARG1, ARG2, ...] [OPTIONS]"
  puts

  puts "TASKS:"
  cmds = self.class.__commands.sort.map do |name, command|
    __display_command_usage(name, command)
  end
  max = cmds.map {|a| a[0].length }.max
  cmds.each do |(cmd, c)|
    desc = c.desc ? "# #{c.desc}" : ""
    puts "  #{cmd.ljust(max)}  #{desc}"
  end

  __display_global_options
end
__display_help_for_command(name) click to toggle source
# File lib/sickle.rb, line 122
def __display_help_for_command(name)
  if cmd = self.class.__commands[name]
    puts "USAGE:"
    u, _ = __display_command_usage(name, cmd)
    puts "  #{$0} #{u}"
    puts
    puts "DESCRIPTION:"
    puts cmd.desc.split("\n").map {|e| "  #{e}"}.join("\n")
    puts
    unless cmd.options.empty?
      puts "OPTIONS:"
      cmd.options.each do |_, opt|
        puts __display_option(opt)
      end
    end

    __display_global_options
  else
    puts "\e[31mCommand '#{name}' not found\e[0m"
  end
end
__display_option(opt) click to toggle source
# File lib/sickle.rb, line 180
def __display_option(opt)
  "  --#{opt.cli_name} (default: #{opt.default})"
end
help(command = nil) click to toggle source
# File lib/sickle.rb, line 111
def help(command = nil)
  if command
    __display_help_for_command(command)
  else
    __display_help
  end
end