aboutsummaryrefslogtreecommitdiff
path: root/lib/leap_cli/markdown_document_listener.rb
diff options
context:
space:
mode:
authorelijah <elijah@riseup.net>2013-02-23 20:51:41 -0800
committerelijah <elijah@riseup.net>2013-02-23 20:51:41 -0800
commit4b30306691c2c4c623871aa663a0e8083b4b11fc (patch)
tree44073db29209175dd9937df604450f82b11985ca /lib/leap_cli/markdown_document_listener.rb
parent0db0bc3b6f0bc616fa9b1319be3083e4ea6affce (diff)
downloadleap_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.rb134
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