class IDL::OptionList::Option::Group::ParamSet

Attributes

params[R]

Public Class Methods

new(options) click to toggle source
# File lib/ridl/optparse_ext.rb, line 75
def initialize(options)
  @description = Array === options[:description] ? options[:description] : (options[:description] || '').split('\n')
  @all_params = options[:all_params] == true
  @params = {}
  parms = options[:params] || options[:param]
  define_params(parms) if parms
end

Public Instance Methods

define_params(spec = {}) click to toggle source
# File lib/ridl/optparse_ext.rb, line 111
def define_params(spec = {})
  case spec
  when String, Hash
    define_param(spec)
  when Array
    spec.each { |p| define_param(p) }
  end
end
description() click to toggle source
# File lib/ridl/optparse_ext.rb, line 107
def description
  @params.values.inject(@description) { |list, vopt| list.concat(vopt[:description] || []) }
end
run(param, options, *handler_args) click to toggle source
# File lib/ridl/optparse_ext.rb, line 83
def run(param, options, *handler_args)
  key = to_key(param)
  if @all_params || @params.has_key?(key)
    param = key if String === param && @params.has_key?(key)
    param_arg = @params.has_key?(param) ? @params[param][:option_name] : param
    if self.respond_to?(:_exec, true)
      _exec(param_arg, options, *handler_args)
    elsif @params.has_key?(param)
      if @params[param][:option_type] == :list
        options[@params[param][:option_name]] ||= []
        options[@params[param][:option_name]] << (handler_args.size == 1 ? handler_args.shift : handler_args)
      elsif @params[param][:option_type] == :noop
        # do nothing
      else
        options[@params[param][:option_name]] = handler_args.empty? ?
            (@params[param].has_key?(:option_value) ? @params[param][:option_value] : true) :
            (handler_args.size == 1 ? handler_args.shift : handler_args)
      end
    end
    return true
  end
  return false
end

Private Instance Methods

define_param(spec) click to toggle source
# File lib/ridl/optparse_ext.rb, line 129
def define_param(spec)
  case spec
  when String
    key = to_key(spec)
    @params[key] = { option_name: key }
  when Hash
    spec.each do |k, v|
      @params[to_key(k)] = (if Hash === v
        {
          option_name: to_key(v[:option_name] || k),
          option_type: v[:type],
          option_value: v.has_key?(:value) ? v[:value] : true,
          description: Array === v[:description] ? v[:description] : (v[:description] || '').split('\n')
        }
      else
        { option_name: to_key(v) }
      end)
    end
  end
end
to_key(param) click to toggle source
# File lib/ridl/optparse_ext.rb, line 122
def to_key(param)
  return param if Symbol === param

  # convert empty strings to single space strings before symbolizing
  String === param ? (param.empty? ? ' ' : param).to_sym : nil
end