Inside-baseball API knowledge: Calling `query_values` with no args returns a Hash of the query values. You'd think it would collect values with duplicate keys into arrays for convenience, but it just hands off the last value, which was the bug.

Calling `query_values` with `Array` (the class literal) as the argument returns a bunch of pairs (similar to one of the querystring methods in jQuery IIRC). So I'm just iterating over the pairs doing the collection to get a hash.