- Author
- Copyright
Copyright © 2011 Martin Velez
- License
Distributed under the same terms as Ruby
“RubyCLI” is a Ruby library which factors out the code needed to create Ruby programs with a command line interface (CLI) and that follow the Unix Philosophy design method outlined in www.faqs.org/docs/artu/ch01s06.html.
Currently, RubyCLI is short and simple. It uses Ruby’s core optparse library.
What does a command line application library need to do?
Provide a user interface (UI)
Process options (use Ruby’s Option Parser)
Process arguments
Pass options and arguments as parameters to other functions defined in libraries or other executables.
What does a command line application library need not do?
Validate options or arguments.
Libraries or other executables should do this.
This is the core algorithm of any Ruby CLI application
defrunifparse_options?&&arguments_Valid?process_optionsprocess_argumentsoutput_options_and_arguments# def runcommandelseoutput_help(1) endend
geminstallruby_cli
Download ruby_cli
Only the lib folder contents are needed
Use the RubyCLI module as a mixin for your CLI application
There are other tools out there which can be used to write command line applications.
clamp - I don’t like to learn new DSLs
optparse - This library uses this to parse options.
Thor - It does not try to follow the Unix Philosophy.
Clip - OptionParser already exists.
New File
Require the ruby_cli gem.
Create a Ruby class.
Call it “App”, for example.
Include the RubyCLI module.
Define the command method.
This is where your program does the actual work.
At this point you have options and arguments available.
Pass them as parameters to library functions or as options/arguments to other executables.
Be smart! Have libraries and other executables do the heavy work.
Be smart! Fewer lines of code (LOC) here is an indication that your code will be easy to maintain.
Define command options and defaults (optional)
This is where you define a hash for your options and set the default values.
Remember, options by definition are optional.
Define command arguments and defaults (optional)
This example demonstrates how to use RubyCLI to create a command line application.
#!/usr/bin/rubyrequire'ruby_cli'classAppincludeRubyCLIdefcommandputs"hello world"endendapp = App.new(ARGV) app.run
This example demonstrates how command specific options can be defined easily using RubyCLI. It is taken from the ruby_ngrams gem executable, which I also authored.
#!/usr/bin/env rubyrequire'ruby_cli'require'ruby_ngrams'classAppincludeRubyCLIdefinitialize_command_options() @options = {:regex=>//, :n=>2} enddefdefine_command_option_parsing@opt_parser.on('-n', '--n NUM', Integer, 'set length n for n-grams') do|n|@options[:n] = nend@opt_parser.on('-r', '--regex "REGEX"', Regexp, 'set regex to split string into tokens') do|r|@options[:regex] = rendenddefcommandtext = ARGF.readtext.ngrams(@options).each { |ngram|putsngram.inspect } endendapp = App.new(ARGV, __FILE__) app.run
Ruby 1.8.7 or greater
None other
There are other tools out there which can be used to write command line applications.
clamp - I don’t like to learn new DSLs
optparse - This library uses this to parse options.
Thor - It does not try to follow the Unix Philosophy.
Clip - OptionParser already exists.
I used his Ruby command line application skeleton code. I borrowed some ideas from there.
Add tests
ruby_cli is hosted on Github at:
https://github.com/martinvelez/ruby_cli
Provide feedback, get help, request features, and reports bugs here:
https://github.com/martinvelez/ruby_cli/issues