Class: EacCli::Definition::HelpFormatter

Inherits:
Object
  • Object
show all
Defined in:
lib/eac_cli/definition/help_formatter.rb

Constant Summary collapse

SEP =
' '
IDENT =
SEP * 2
OPTION_DESC_SEP =
IDENT * 2

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.option_long(option) ⇒ Object



14
15
16
17
18
# File 'lib/eac_cli/definition/help_formatter.rb', line 14

def option_long(option)
  b = option.long
  b += '=VALUE' if option.argument?
  b
end

.option_short(option) ⇒ Object



20
21
22
23
24
# File 'lib/eac_cli/definition/help_formatter.rb', line 20

def option_short(option)
  b = option.short
  b += 'VALUE' if option.argument?
  b
end

Instance Method Details

#positional_argument(positional) ⇒ Object



29
30
31
32
33
34
35
36
37
38
# File 'lib/eac_cli/definition/help_formatter.rb', line 29

def positional_argument(positional)
  if positional.subcommand?
    ::EacCli::RunnerWith::Help::Builder::Alternative::SUBCOMMANDS_MACRO
  else
    r = "<#{positional.name}>"
    r += '...' if positional.repeat?
    r = "[#{r}]" if positional.optional?
    r
  end
end

#section(header, include_header = true) ⇒ Object



40
41
42
43
44
45
# File 'lib/eac_cli/definition/help_formatter.rb', line 40

def section(header, include_header = true)
  b = include_header ? "#{header.humanize}:\n" : ''
  b += send("self_#{header}") + "\n"
  # TO-DO: implement alternatives
  b
end

#self_optionsObject



47
48
49
# File 'lib/eac_cli/definition/help_formatter.rb', line 47

def self_options
  definition.options.map { |option| IDENT + option_definition(option) }.join("\n")
end

#self_usageObject



51
52
53
# File 'lib/eac_cli/definition/help_formatter.rb', line 51

def self_usage
  IDENT + self_usage_arguments.join(SEP)
end

#self_usage_argumentsObject



55
56
57
58
59
60
# File 'lib/eac_cli/definition/help_formatter.rb', line 55

def self_usage_arguments
  [::EacCli::RunnerWith::Help::Builder::Alternative::PROGRAM_MACRO] +
    definition.options_argument.if_present([]) { |_v| ['[options]'] } +
    self_usage_arguments_options +
    self_usage_arguments_positional
end

#self_usage_arguments_optionsObject



62
63
64
65
66
# File 'lib/eac_cli/definition/help_formatter.rb', line 62

def self_usage_arguments_options
  definition.options.select(&:show_on_usage?).map do |option|
    self.class.option_long(option)
  end
end

#self_usage_arguments_positionalObject



68
69
70
# File 'lib/eac_cli/definition/help_formatter.rb', line 68

def self_usage_arguments_positional
  definition.positional.map { |p| positional_argument(p) }
end

#to_bannerObject



72
73
74
# File 'lib/eac_cli/definition/help_formatter.rb', line 72

def to_banner
  "#{definition.description}\n\n#{section('usage')}"
end