lib/hammer_cli/options/normalizers.rb in hammer_cli-0.1.4 vs lib/hammer_cli/options/normalizers.rb in hammer_cli-0.2.0
- old
+ new
@@ -30,24 +30,40 @@
return {} unless val.is_a?(String)
return {} if val.empty?
result = {}
- pair_re = '([^,]+)=([^,\[]+|\[[^\[\]]*\])'
+ pair_re = '([^,=]+)=([^,\[]+|\[[^\[\]]*\])'
full_re = "^((%s)[,]?)+$" % pair_re
unless Regexp.new(full_re).match(val)
raise ArgumentError, _("value must be defined as a comma-separated list of key=value")
end
val.scan(Regexp.new(pair_re)) do |key, value|
value = value.strip
value = value.scan(/[^,\[\]]+/) if value.start_with?('[')
- result[key.strip]=value
+ result[key.strip] = strip_value(value)
end
return result
+ end
+ private
+
+ def strip_value(value)
+ if value.is_a? Array
+ value.map do |item|
+ strip_chars(item.strip, '"\'')
+ end
+ else
+ strip_chars(value.strip, '"\'')
+ end
+ end
+
+ def strip_chars(string, chars)
+ chars = Regexp.escape(chars)
+ string.gsub(/\A[#{chars}]+|[#{chars}]+\z/, '')
end
end
class List < AbstractNormalizer