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_options(width) ⇒ Object
Return all docopt lines for the various ‘Options’ sections.
-
#docopt_usage ⇒ Object
Return all docopt lines for the ‘Usage’ section.
-
#initialize(name, version, summary, actions, options) ⇒ 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(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, ) @name = name @version = version @summary = summary @actions = actions = 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.
81 82 83 |
# File 'lib/runfile/docopt_helper.rb', line 81 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.
26 27 28 29 30 31 32 33 34 |
# File 'lib/runfile/docopt_helper.rb', line 26 def docopt width, height = detect_terminal_size doc = ["#{@name} #{@version}"] doc << "#{@summary}" if @summary doc += docopt_usage doc += docopt_commands width doc += width doc.join "\n" end |
#docopt_commands(width) ⇒ Object
Return all docopt lines for the ‘Commands’ section
47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/runfile/docopt_helper.rb', line 47 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_options(width) ⇒ Object
Return all docopt lines for the various ‘Options’ sections
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/runfile/docopt_helper.rb', line 62 def (width) ['Options'] = {} unless ['Options'] ['Options']['-h --help'] = 'Show this screen' ['Options']['--version'] = 'Show version number' doc = [] .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
37 38 39 40 41 42 43 44 |
# File 'lib/runfile/docopt_helper.rb', line 37 def docopt_usage doc = ["\nUsage:"]; @actions.each do |name, action| doc << " run #{action.usage}" unless action.usage == false end doc << " run ( -h | --help | --version )\n" doc end |