Namespace

Class/Module Index [+]

Quicksearch

Mixlib::CLI

Constants

VERSION

Attributes

config[RW]
opt_parser[RW]
options[RW]

Public Class Methods

included(receiver) click to toggle source
# File lib/mixlib/cli.rb, line 184
def self.included(receiver)
  receiver.extend(Mixlib::CLI::ClassMethods)
end
new(*args) click to toggle source

Create a new Mixlib::CLI class. If you override this, make sure you call super!

Parameters

*args<Array>

The array of arguments passed to the initializer

Returns

object<Mixlib::Config>

Returns an instance of whatever you wanted :)

# File lib/mixlib/cli.rb, line 85
def initialize(*args)
  @options = Hash.new
  @config  = Hash.new
  
  # Set the banner
  @banner  = self.class.banner
  
  # Dupe the class options for this instance
  klass_options = self.class.options
  klass_options.keys.inject(@options) { |memo, key| memo[key] = klass_options[key].dup; memo }
  
  # Set the default configuration values for this instance
  @options.each do |config_key, config_opts|
    config_opts[:on] ||= :on
    config_opts[:boolean] ||= false
    config_opts[:required] ||= false
    config_opts[:proc] ||= nil
    config_opts[:show_options] ||= false
    config_opts[:exit] ||= nil
    
    if config_opts.has_key?(:default)
      @config[config_key] = config_opts[:default]
    end
  end
  
  super(*args)
end

Public Instance Methods

build_option_arguments(opt_setting) click to toggle source
# File lib/mixlib/cli.rb, line 169
def build_option_arguments(opt_setting)      
  arguments = Array.new
  
  arguments << opt_setting[:short] if opt_setting.has_key?(:short)
  arguments << opt_setting[:long] if opt_setting.has_key?(:long)
  
  if opt_setting.has_key?(:description)
    description = opt_setting[:description]
    description << " (required)" if opt_setting[:required]
    arguments << description
  end
      
  arguments
end
parse_options(argv=ARGV) click to toggle source

Parses an array, by default ARGV, for command line options (as configured at the class level).

Parameters

argv<Array>

The array of arguments to parse; defaults to ARGV

Returns

argv<Array>

Returns any un-parsed elements.

# File lib/mixlib/cli.rb, line 120
def parse_options(argv=ARGV)
  argv = argv.dup
  @opt_parser = OptionParser.new do |opts|  
    # Set the banner
    opts.banner = banner        
    
    # Create new options
    options.sort { |a, b| a[0].to_s <=> b[0].to_s }.each do |opt_key, opt_val|          
      opt_args = build_option_arguments(opt_val)
      
      opt_method = case opt_val[:on]
        when :on
          :on
        when :tail
          :on_tail
        when :head
          :on_head
        else
          raise ArgumentError, "You must pass :on, :tail, or :head to :on"
        end
                  
      parse_block =
        Proc.new() do |c|
          config[opt_key] = (opt_val[:proc] && opt_val[:proc].call(c)) || c
          puts opts if opt_val[:show_options]
          exit opt_val[:exit] if opt_val[:exit]
        end
                
      full_opt = [ opt_method ]
      opt_args.inject(full_opt) { |memo, arg| memo << arg; memo }
      full_opt << parse_block
      opts.send(*full_opt)
    end
  end
  @opt_parser.parse!(argv)
  
  # Deal with any required values
  options.each do |opt_key, opt_value|
    if opt_value[:required] && !config.has_key?(opt_key)
      reqarg = opt_value[:short] || opt_value[:long]
      puts "You must supply #{reqarg}!"
      puts @opt_parser
      exit 2
    end
  end
  
  argv
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.