diff options
author | elijah <elijah@riseup.net> | 2013-02-23 20:51:41 -0800 |
---|---|---|
committer | elijah <elijah@riseup.net> | 2013-02-23 20:51:41 -0800 |
commit | 4b30306691c2c4c623871aa663a0e8083b4b11fc (patch) | |
tree | 44073db29209175dd9937df604450f82b11985ca /lib/leap_cli/markdown_document_listener.rb | |
parent | 0db0bc3b6f0bc616fa9b1319be3083e4ea6affce (diff) | |
download | leap_cli-4b30306691c2c4c623871aa663a0e8083b4b11fc.tar.gz leap_cli-4b30306691c2c4c623871aa663a0e8083b4b11fc.tar.bz2 |
added `rake doc` command.
Diffstat (limited to 'lib/leap_cli/markdown_document_listener.rb')
-rw-r--r-- | lib/leap_cli/markdown_document_listener.rb | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/lib/leap_cli/markdown_document_listener.rb b/lib/leap_cli/markdown_document_listener.rb new file mode 100644 index 0000000..60b012e --- /dev/null +++ b/lib/leap_cli/markdown_document_listener.rb @@ -0,0 +1,134 @@ +# +# A class to generate a markdown file with all the information available with the +# help subcommand. +# +# This is adapted from GLI::Commands::RdocDocumentListener +# + +require 'stringio' +require 'gli/commands/help_modules/arg_name_formatter' + +module LeapCli + class MarkdownDocumentListener + + def initialize(global_options,options,arguments) + @io = File.new(File.basename($0) + ".md",'w') + @nest = '' + @commands = [File.basename($0)] + @arg_name_formatter = GLI::Commands::HelpModules::ArgNameFormatter.new + end + + def beginning + end + + # Called when processing has completed + def ending + @io.close + end + + # Gives you the program description + def program_desc(desc) + @io.puts "@title = 'Command Line Reference'" + #@io.puts "# #{File.basename($0)} - #{desc}" + @io.puts + end + + def program_long_desc(desc) + @io.puts desc + @io.puts + end + + # Gives you the program version + def version(version) + #@io.puts "v#{version}" + #@io.puts + end + + def options + #@io.puts "<div class='options'>" + @io.puts + if @nest.size == 0 + @io.puts "# Global Options" + else + #@io.puts "#{@nest}# Options" + @io.puts "**Options**" + end + @io.puts + end + + # Gives you a flag in the current context + def flag(name,aliases,desc,long_desc,default_value,arg_name,must_match,type) + invocations = ([name] + Array(aliases)).map { |_| add_dashes(_) }.join('|') + usage = "#{invocations} #{arg_name || 'arg'}" + #@io.puts "#{@nest}## #{usage}" + @io.puts "* `#{usage}` " + @io.puts String(desc).strip + " " + @io.puts String(long_desc).strip + " " if long_desc + @io.puts "Default Value: #{default_value || 'None'} " + @io.puts "Must Match: #{must_match.to_s} " unless must_match.nil? + @io.puts + end + + # Gives you a switch in the current context + def switch(name,aliases,desc,long_desc,negetable) + if negetable + name = "[no-]#{name}" if name.to_s.length > 1 + aliases = aliases.map { |_| _.to_s.length > 1 ? "[no-]#{_}" : _ } + end + invocations = ([name] + aliases).map { |_| add_dashes(_) }.join('|') + #@io.puts "#{@nest}## #{invocations}" + @io.puts "* `#{invocations}` " + @io.puts String(desc).strip + " " + #@io.puts + #@io.puts String(long_desc).strip + @io.puts + end + + def end_options + #@io.puts "</div>" + end + + def commands + #@io.puts "#{@nest}## Commands" + #@nest = "#{@nest}#" + end + + # Gives you a command in the current context and creates a new context of this command + def command(name,aliases,desc,long_desc,arg_name,arg_options) + @commands.push(name) + #@io.puts "#{@nest}## Command: <tt>#{([name] + aliases).join('|')} #{@arg_name_formatter.format(arg_name,arg_options)}</tt>" + @io.puts + @io.puts "#{@nest}# #{@commands.join ' '} #{@arg_name_formatter.format(arg_name,arg_options)}" + @io.puts + @io.puts String(desc).strip + @io.puts + @io.puts String(long_desc).strip + @nest = "#{@nest}#" + end + + # Ends a command, and "pops" you back up one context + def end_command(name) + @nest.gsub!(/\#$/,'') + @commands.pop + end + + # Gives you the name of the current command in the current context + def default_command(name) + @io.puts "Default Command: #{name}" unless name.nil? + end + + def end_commands + @nest.gsub!(/\#$/,'') + end + + private + + def add_dashes(name) + name = "-#{name}" + name = "-#{name}" if name.length > 2 + name + end + + + end +end |