QueryString to Hash in Ruby
# Today's little useless tidbit converts a url's query string into a hash
# set of k/v pairs in a way that merges duplicates and massages empty
# querystring values
def qs_to_hash(querystring)
keyvals = query.split('&').inject({}) do |result, q|
k,v = q.split('=')
if !v.nil?
result.merge({k => v})
elsif !result.key?(k)
result.merge({k => true})
else
result
end
end
keyvals
end
qs_to_hash("a=b&b=c&c=d") # {a=>b, b=>c, c=>d}
qs_to_hash("a=b&b=c&c") # {a=>b, b=>c, c=>true} nil becomes true
qs_to_hash("a=b&b=c&a=d") # {a=>d, b=>c} last declaration wins
qs_to_hash("a=b&b=c&a") # {a=>b, b=>c} nils don't override set vals
# Now, of course Rails's implementation is much smarter than this...
# but you never know.