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