Class: ParseOpts::ArgSpec

Inherits:
Object
  • Object
show all
Defined in:
lib/parseOpts.rb

Overview

:nodoc: all

Constant Summary collapse

QuantOptions =
{
  ""  => [ false, false ],
  "?" => [ true,  false ],
  "*" => [ true,  true  ],
  "+" => [ false, true  ]
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, quant, desc, pred, default) ⇒ ArgSpec

Returns a new instance of ArgSpec.

Raises:

  • (ArgumentError)


67
68
69
70
71
72
# File 'lib/parseOpts.rb', line 67

def initialize(name, quant, desc, pred, default)
  @name, @quant, @desc, @pred, @default = name, quant, desc, pred, default
  raise ArgumentError, "Unknown quantifier" unless QuantOptions.has_key?(quant)
  @optional, @multiple = *QuantOptions[quant]
  raise ArgumentError, "Default not allowed for mandatory argument" if @default && !@optional
end

Instance Attribute Details

#defaultObject (readonly)

Returns the value of attribute default.



65
66
67
# File 'lib/parseOpts.rb', line 65

def default
  @default
end

#descObject (readonly)

Returns the value of attribute desc.



65
66
67
# File 'lib/parseOpts.rb', line 65

def desc
  @desc
end

#multipleObject (readonly)

Returns the value of attribute multiple.



65
66
67
# File 'lib/parseOpts.rb', line 65

def multiple
  @multiple
end

#nameObject (readonly)

Returns the value of attribute name.



65
66
67
# File 'lib/parseOpts.rb', line 65

def name
  @name
end

#optionalObject (readonly)

Returns the value of attribute optional.



65
66
67
# File 'lib/parseOpts.rb', line 65

def optional
  @optional
end

#quantObject (readonly)

Returns the value of attribute quant.



65
66
67
# File 'lib/parseOpts.rb', line 65

def quant
  @quant
end

Instance Method Details

#initObject



74
75
76
77
# File 'lib/parseOpts.rb', line 74

def init
  @value = @multiple ? [] : nil
  @matched = false
end

#match?(args) ⇒ Boolean

Returns:

  • (Boolean)


79
80
81
# File 'lib/parseOpts.rb', line 79

def match?(args)
  @pred ? @pred.call(args[0]) : true
end

#process(args) ⇒ Object



83
84
85
86
87
88
89
90
91
92
# File 'lib/parseOpts.rb', line 83

def process(args)
  @value = if @multiple
			 a = [args.shift]
			 a << args.shift while args.size > 0 && match?(args)
			 a
		   else
			 args.shift
		   end
  @matched = true
end

#valueObject



94
95
96
# File 'lib/parseOpts.rb', line 94

def value
  @default && !@matched ? @default : @value
end