Class: EacCli::Docopt::DocBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/eac_cli/docopt/doc_builder.rb,
lib/eac_cli/docopt/doc_builder/alternative.rb

Defined Under Namespace

Classes: Alternative

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



17
18
19
20
21
# File 'lib/eac_cli/docopt/doc_builder.rb', line 17

def option_long(option)
  b = option.long
  b += '=<value>' if option.argument?
  b
end

.option_short(option) ⇒ Object



23
24
25
26
27
# File 'lib/eac_cli/docopt/doc_builder.rb', line 23

def option_short(option)
  b = option.short
  b += '=<value>' if option.argument?
  b
end

.option_usage_full(option) ⇒ Object



29
30
31
32
33
34
35
# File 'lib/eac_cli/docopt/doc_builder.rb', line 29

def option_usage_full(option)
  if option.long.present?
    [option.short, option_long(option)].reject(&:blank?).join(SEP)
  else
    option_short(option)
  end
end

Instance Method Details

#option_definition(option) ⇒ Object



38
39
40
41
42
# File 'lib/eac_cli/docopt/doc_builder.rb', line 38

def option_definition(option)
  self.class.option_usage_full(option) + option.description.if_present('') do |v|
    OPTION_DESC_SEP + v
  end
end

#options_sectionObject



53
54
55
56
57
# File 'lib/eac_cli/docopt/doc_builder.rb', line 53

def options_section
  "Options:\n" +
    definition.alternatives.flat_map(&:options)
              .map { |option| IDENT + option_definition(option) + "\n" }.join
end

#section(header, include_header = true) ⇒ Object



44
45
46
47
48
49
50
51
# File 'lib/eac_cli/docopt/doc_builder.rb', line 44

def section(header, include_header = true)
  b = include_header ? "#{header.humanize}:\n" : ''
  b += send("self_#{header}") + "\n"
  definition.alternatives.each do |alternative|
    b += IDENT + ::EacCli::Docopt::DocBuilder::Alternative.new(alternative).to_s + "\n"
  end
  b
end

#to_sObject



66
67
68
# File 'lib/eac_cli/docopt/doc_builder.rb', line 66

def to_s
  "#{definition.description}\n\n#{usage_section}\n#{options_section}\n"
end

#usage_sectionObject



59
60
61
62
63
64
# File 'lib/eac_cli/docopt/doc_builder.rb', line 59

def usage_section
  "Usage:\n" +
    definition.alternatives.map do |alternative|
      IDENT + ::EacCli::Docopt::DocBuilder::Alternative.new(alternative).to_s + "\n"
    end.join
end