raise ArgumentError, "template #{str.inspect} should be a String" unless str.kind_of?(String)
# split and convert ':xyz' to symbols
- items = str.strip.split(/\s+/).collect { |c|
+ items = str.strip.split(/\]?\s+\[?/).collect { |c|
+ # there might be extra (non-alphanumeric) stuff (e.g. punctuation) after the symbol name
if /^(:|\*)(\w+)(.*)/ =~ c
- # there might be extra (non-alphanumeric) stuff (e.g. punctuation) after the symbol name
sym = ($1 == ':' ) ? $2.intern : "*#{$2}".intern
- if $3.nil?
+ if $3.empty?
sym
else
[sym, $3]
return nil, "#{m.message.inspect} doesn't match #{@dyn_items.first.inspect} (#{@regexp})" unless matching
return nil, "#{m.message.inspect} only matches #{@dyn_items.first.inspect} (#{@regexp}) partially" unless matching[0] == m.message
- debug "#{m.message.inspect} matched #{@regexp} with #{matching[1..-1].join(', ')}"
- debug "Associating #{matching[1..-1].join(', ')} with dyn items #{@dyn_items[1..-1].join(', ')}"
+ debug_match = matching[1..-1].collect{ |d| d.inspect}.join(', ')
+ debug "#{m.message.inspect} matched #{@regexp} with #{debug_match}"
+ debug "Associating #{debug_match} with dyn items #{@dyn_items[1..-1].join(', ')}"
(@dyn_items.length - 1).downto 1 do |i|
it = @dyn_items[i]
end
else
value = @defaults[item]
- warning "No default value for optiona #{item.inspect} specified" unless @defaults.has_key?(item)
+ warning "No default value for option #{item.inspect} specified" unless @defaults.has_key?(item)
end
options[item] = value
debug "set #{item} to #{options[item].inspect}"