SimpleCLI¶ ↑
UNDERGOING RENOVATIONS !!¶ ↑
SimpleCLI is Undergoing Renovations
After over a year of use, this library needs some love!
I’m going to …
-
get a spec suite working again (I had specs for SimpleCLI once … they’re gone now)
-
create a DSL (or 2) for making it easier for people to make SimpleCLI apps if they don’t want to just include the SimpleCLI module in one of their classes
-
make (atleast some of) the DSL work in pre-defined classes (kindof like what we do now)
-
create a screencast showing how easy it is to use SimpleCLI (and how to test-drive SimpleCLI applications)
-
document #command_missing and #default_comment usage with good examples
-
create abunchof examples and throw them in the examples directory
-
add #before and #after blocks for handling global options or something to do before exiting type stuff
-
make sure errors return the right response code
About¶ ↑
Super Simple RubyGems-like CLI
SimpleCLI gives you a stupidly simple way to implement command-line interfaces like that of RubyGems with a basic interface like:
gem command [options]
SimpleCLI gives you a way of defining your commands (or actions) so they’ll automatically show up when you run ‘yourapp commands`
SimpleCLI also makes it really easy to add documentation to each of your commands (or actions)
Real Examples¶ ↑
I use SimpleCLI in most of my apps for quick and dirty command-line interfaces.
Here are a few real examples:
Example¶ ↑
Here’s a super simple SimpleCLI example:
#! /usr/bin/env ruby require File.dirname(__FILE__) + '/../lib/simplecli' class Hello include SimpleCLI def usage puts <<doco Hello CLI Usage: #{ script_name } command [options] Futher help: #{ script_name } commands # list all available commands #{ script_name } help <COMMAND> # show help for COMMAND #{ script_name } help # show this help message doco end def sayhello_help <<doco Usage: #{ script_name } sayhello [SAY] Arguments: SAY: Something to say (default 'Hello World!') Summary: Says hello! doco end def sayhello *args puts args.empty? ? "Hello World!" : args.join(' ') end end # POSTAMBLE if __FILE__ == $0 Hello.new( ARGV, :default => 'sayhello' ).run end
Example usage:
$ ./hello-cli
Hello CLI Usage: hello-cli command [options] Futher help: hello-cli commands # list all available commands hello-cli help <COMMAND> # show help for COMMAND hello-cli help # show this help message
$ ./hello-cli commands
hello-cli commands are: DEFAULT COMMAND sayhello commands List all 'hello-cli' commands help Provide help documentation for a command sayhello Says hello! For help on a particular command, use 'hello-cli help COMMAND'.
$ ./hello-cli help
Usage: hello-cli help COMMAND Summary: Provide help documentation for a command
$ ./hello-cli help sayhello
Usage: hello-cli sayhello [SAY] Arguments: SAY: Something to say (default 'Hello World!') Summary: Says hello!
$ ./hello-cli sayhello
Hello World!
$ ./hello-cli sayhello Hi There
Hi There
$ ./hello-cli Hi There
‘# this works because sayhello is configured as the default command`
Hi There
TODO
* implement a `before` block for handling global options * there was once a spec suite ... where'd it go? find or recreate it!