public
Description: A mixin for creating command line applications - gives an easy DSL for argument specification and processing
Homepage: http://www.opscode.com
Clone URL: git://github.com/opscode/mixlib-cli.git
name age message
file .gitignore Mon May 11 21:05:35 -0700 2009 Convert mixlib-cli to jeweler. [fujin]
file LICENSE Thu Mar 12 17:40:24 -0700 2009 Initial commit [adamhjk]
file NOTICE Thu Mar 12 17:40:24 -0700 2009 Initial commit [adamhjk]
file README.rdoc Thu Mar 12 17:40:24 -0700 2009 Initial commit [adamhjk]
file Rakefile Thu May 14 09:34:31 -0700 2009 Add spec options for rspec/rake spec [fujin]
file VERSION.yml Tue May 12 00:20:31 -0700 2009 Version bump to 1.0.4 [fujin]
directory features/ Mon May 11 21:05:35 -0700 2009 Convert mixlib-cli to jeweler. [fujin]
directory lib/ Thu Mar 12 17:40:24 -0700 2009 Initial commit [adamhjk]
file mixlib-cli.gemspec Tue May 12 00:20:31 -0700 2009 Regenerated gemspec for version 1.0.4 [fujin]
directory spec/ Thu May 14 09:34:31 -0700 2009 Add spec options for rspec/rake spec [fujin]
README.rdoc

Mixlib::CLI

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'

  class MyCLI
    include Mixlib::CLI

    option :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 => 0

  end

  # ARGV = [ '-c', 'foo.rb', '-l', 'debug' ]
  cli = MyCLI.new
  cli.parse_options
  cli.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):

  class MyConfig
    extend(Mixlib::Config)

    log_level   :info
    config_file "default.rb"
  end

  class MyCLI
    def run(argv=ARGV)
      parse_options(argv)
      MyConfig.merge!(config)
    end
  end

  c = MyCLI.new
  # ARGV = [ '-l', 'debug' ]
  c.run
  MyConfig[: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.

Have fun!