Class: Runfile::DocoptHelper
- Inherits:
-
Object
- Object
- Runfile::DocoptHelper
- 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
-
#args(argv) ⇒ Object
Call the docopt handler, which will either return a parsed arguments list, or halt execution and show usage.
-
#docopt ⇒ Object
Generate a document based on all the actions, help messages and options we have collected from the Runfile DSL.
-
#docopt_commands(width) ⇒ Object
Return all docopt lines for the ‘Commands’ section.
-
#docopt_examples(width) ⇒ Object
Return all docopt lines for the ‘Examples’ section.
-
#docopt_options(width) ⇒ Object
Return all docopt lines for the various ‘Options’ sections.
-
#docopt_usage ⇒ Object
Return all docopt lines for the ‘Usage’ section.
-
#initialize(superspace, name, version, summary, actions, options, examples) ⇒ DocoptHelper
constructor
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.
Constructor Details
#initialize(superspace, name, version, summary, actions, options, examples) ⇒ 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. The superspace argument will be the name of runfile, in case we are running a named.runfile. It is only needed to generate the proper ‘run superspace (-h|–help|–version)` line
19 20 21 22 23 24 25 26 27 |
# File 'lib/runfile/docopt_helper.rb', line 19 def initialize(superspace, name, version, summary, actions, , examples) @superspace = superspace @name = name @version = version @summary = summary @actions = actions @options = @examples = examples end |
Instance Method Details
#args(argv) ⇒ Object
Call the docopt handler, which will either return a parsed arguments list, or halt execution and show usage.
108 109 110 |
# File 'lib/runfile/docopt_helper.rb', line 108 def args(argv) Docopt::docopt(docopt, version: @version, argv:argv) end |
#docopt ⇒ Object
Generate a document based on all the actions, help messages and options we have collected from the Runfile DSL.
31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/runfile/docopt_helper.rb', line 31 def docopt width = detect_terminal_size[0] doc = [] doc << (@version ? "#{@name} #{@version}" : "#{@name}") doc << "#{@summary}" if @summary doc += docopt_usage doc += docopt_commands width doc += width doc += docopt_examples width doc.join "\n" end |
#docopt_commands(width) ⇒ Object
Return all docopt lines for the ‘Commands’ section
59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/runfile/docopt_helper.rb', line 59 def docopt_commands(width) doc = [] caption_printed = false @actions.each do |name, action| action.help or next doc << "Commands:" unless caption_printed caption_printed = true helpline = " #{action.help}" wrapped = word_wrap helpline, width doc << " #{action.usage}\n#{wrapped}\n" unless action.usage == false end doc end |
#docopt_examples(width) ⇒ Object
Return all docopt lines for the ‘Examples’ section
92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/runfile/docopt_helper.rb', line 92 def docopt_examples(width) return [] if @examples.empty? doc = ["Examples:"] base_command = @superspace ? "run #{@superspace}" : "run" @examples.each do |command| helpline = " #{base_command} #{command}" wrapped = word_wrap helpline, width doc << "#{wrapped}" end doc end |
#docopt_options(width) ⇒ Object
Return all docopt lines for the various ‘Options’ sections
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/runfile/docopt_helper.rb', line 74 def (width) @options['Options'] = {} unless @options['Options'] @options['Options']['-h --help'] = 'Show this screen' @options['Options']['--version'] = 'Show version number' if @version doc = [] @options.each do |scope, values| doc << "#{scope}:" values.each do |flag, text| helpline = " #{text}" wrapped = word_wrap helpline, width doc << " #{flag}\n#{wrapped}\n" end end doc end |
#docopt_usage ⇒ Object
Return all docopt lines for the ‘Usage’ section
44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/runfile/docopt_helper.rb', line 44 def docopt_usage doc = ["\nUsage:"]; @actions.each do |name, action| doc << " run #{action.usage}" unless action.usage == false end basic_flags = @version ? "(-h|--help|--version)" : "(-h|--help)" if @superspace doc << " run #{@superspace} #{basic_flags}\n" else doc << " run #{basic_flags}\n" end doc end |