Class: Runfile::DocoptHelper

Inherits:
Object
  • Object
show all
Defined in:
lib/runfile/docopt_helper.rb

Overview

The DocoptHelper class handles the dynamic generation of the docopt document and the docopt part of the execution (meaning, to call Docopt so it returns the parsed arguments or halts with usage message).

Instance Method Summary collapse

Constructor Details

#initialize(name, version, summary, actions, options) ⇒ DocoptHelper

The constructor expects to get all the textual details needed to generate a docopt document (name, version, summary, options) and an array of Action objects.



16
17
18
19
20
21
22
# File 'lib/runfile/docopt_helper.rb', line 16

def initialize(name, version, summary, actions, options)
  @name    = name
  @version = version
  @summary = summary
  @actions = actions
  @options = options
end

Instance Method Details

#args(argv) ⇒ Object

Calls the docopt handler, which will either return a parsed arguments list, or halt execution and show usage.



57
58
59
# File 'lib/runfile/docopt_helper.rb', line 57

def args(argv)
  Docopt::docopt(docopt, version: @version, argv:argv)
end

#docoptObject

Generate a document based on all the actions, help messages and options we have collected from the Runfile DSL.



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/runfile/docopt_helper.rb', line 26

def docopt
  width, height = detect_terminal_size
  doc = "#{@name} #{@version}\n"
  doc += "#{@summary} \n" if @summary
  doc += "\nUsage:\n";
  @actions.each do |name, action|
    doc += "  run #{action.usage}\n" unless action.usage == false
  end
  doc += "  run ( -h | --help | --version )\n\n"
  caption_printed = false
  @actions.each do |name, action|
    action.help or next
    doc += "Commands:\n" unless caption_printed
    caption_printed = true
    helpline = "      #{action.help}"
    wrapped  = word_wrap helpline, width
    doc += "  #{action.usage}\n#{wrapped}\n\n" unless action.usage == false
  end
  doc += "Options:\n"
  doc += "  -h --help\n      Show this screen\n\n"
  doc += "  --version\n      Show version\n\n"
  @options.each do |flag, text|
    helpline = "      #{text}"
    wrapped  = word_wrap helpline, width
    doc += "  #{flag}\n#{wrapped}\n\n"
  end
  doc
end