class KeyValueParser
Public Class Methods
new(defaults={})
click to toggle source
# File lib/key_value_parser.rb, line 3 def initialize defaults={}, options={} @defaults = defaults @options = { separator: /\s*[=:]\s*/, normalize_keys: true, typecast_values: true, array_values: true }.merge(options) end
Public Instance Methods
parse(kvs)
click to toggle source
# File lib/key_value_parser.rb, line 13 def parse kvs @defaults.merge( Hash[ kvs.map do |a| k, *v = a.split(@options[:separator], @options[:array_values] ? 0 : 2) if v.size==1 v = v[0] elsif v.size==0 v = nil end [ @options[:normalize_keys] ? normalize_key(k) : k, @options[:typecast_values] ? typecast(v) : v ] end ] ) end
Private Instance Methods
normalize_key(k)
click to toggle source
# File lib/key_value_parser.rb, line 34 def normalize_key k k.sub(/^--/,'').gsub(/[\s\-]+/, '_').to_sym end
typecast(v)
click to toggle source
# File lib/key_value_parser.rb, line 38 def typecast v if v.is_a? Array return v.map{|item| typecast(item)} end if v=='true' or v.nil? v = true elsif v=='false' v = false elsif v=~/^-?\d*\.\d+$/ v = v.to_f elsif v=~/^-?\d+$/ v = v.to_i else v end end