lib/hammer_cli/options/normalizers.rb in hammer_cli-0.1.2 vs lib/hammer_cli/options/normalizers.rb in hammer_cli-0.1.3
- old
+ new
@@ -26,17 +26,28 @@
_("Comma-separated list of key=value.")
end
def format(val)
return {} unless val.is_a?(String)
+ return {} if val.empty?
- val.split(",").inject({}) do |result, item|
- parts = item.split("=")
- if parts.size != 2
- raise ArgumentError, _("value must be defined as a comma-separated list of key=value")
- end
- result.update(parts[0] => parts[1])
+ result = {}
+
+ 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
+ end
+ return result
+
end
end
class List < AbstractNormalizer