Mixlib::CLI provides a class-based command line option parsing object, like the one used in Chef, Ohai and Relish. To use in your project:
require'rubygems'require'mixlib/cli'classMyCLIincludeMixlib::CLIoption:config_file, :short=>"-c CONFIG", :long=>"--config CONFIG", :default=>'config.rb', :description=>"The configuration file to use"option:log_level, :short=>"-l LEVEL", :long=>"--log_level LEVEL", :description=>"Set the log level (debug, info, warn, error, fatal)", :required=>true, :proc=>Proc.new { |l|l.to_sym } option:help, :short=>"-h", :long=>"--help", :description=>"Show this message", :on=>:tail, :boolean=>true, :show_options=>true, :exit=>0end# ARGV = [ '-c', 'foo.rb', '-l', 'debug' ]cli = MyCLI.newcli.parse_optionscli.config[:config_file] # 'foo.rb'cli.config[:log_level] # :debug
If you are using this in conjunction with Mixlib::Config, you can do something like this (building on the above definition):
classMyConfigextend(Mixlib::Config) log_level:infoconfig_file"default.rb"endclassMyCLIdefrun(argv=ARGV) parse_options(argv) MyConfig.merge!(config) endendc = MyCLI.new# ARGV = [ '-l', 'debug' ]c.runMyConfig[:log_level] # :debug
Available arguments to ‘option’:
- :short
The short option, just like from optparse. Example: “-l LEVEL”
- :long
The long option, just like from optparse. Example: “–level LEVEL”
- :description
The description for this item, just like from optparse.
- :default
A default value for this option
- :required
Prints a message informing the user of the missing requirement, and exits. Default is false.
- :on
Set to :tail to appear at the end, or :head to appear at the top.
- :boolean
If this option takes no arguments, set this to true.
- :show_options
If you want the option list printed when this option is called, set this to true.
- :exit
Exit your program with the exit code when this option is specified. Example: 0
- :proc
If set, the configuration value will be set to the return value of this proc.
:required works, and we now support Ruby-style boolean option negation (e.g. ‘–no-cookie’ will set ‘cookie’ to false if the option is boolean)
We no longer destructively manipulate ARGV.
Have fun!