module CommandKit::Options

Provides a thin DSL for defining options as attributes.

## Examples

include CommandKit::Options

option :foo, short: '-f',
             value: {type: String},
             desc:  "Foo option"

option :bar, short: '-b',
             value: {
               type:  String,
               usage: 'STR:STR:...'
             },
             desc: "Bar option" do |arg|
  @bar = arg.split(':')
end

### initialize and using instance variables

option :number, value: {type: Integer},
                desc: 'Numbers' do |num|
  @numbers << num
end

def initialize(**kwargs)
  super(**kwargs)

  @numbers = []
end

Attributes

options[R]

Hash of parsed option values.

@return [Hash{Symbol => Object}]

@api semipublic

Public Class Methods

new(options: {}, **kwargs) click to toggle source

Initializes {#options} and populates the {Parser#option_parser option parser}.

@param [Hash{Symbol => Object}] options

Optional prepopulated options hash.

@note

The {#option_parser} will populate {#options} and also call any
{ClassMethods#option option} blocks with the parsed option values.

@api public

Calls superclass method CommandKit::Options::Parser::new
# File lib/command_kit/options.rb, line 208
def initialize(options: {}, **kwargs)
  @options = options

  super(**kwargs)

  self.class.options.each_value do |option|
    option_parser.on(*option.usage,option.type,option.desc) do |arg,*captures|
      @options[option.name] = if arg.nil?
                                option.default_value
                              else
                                arg
                              end

      if option.block
        instance_exec(*arg,*captures,&option.block)
      end
    end
  end
end