Skip to content

beccasaurus/simplecli

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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!

About

Simple CLI application development library (Ruby)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages