Skip to content

Commit

Permalink
Rack::Utils#normalize_params should be ignorant of the provided param…
Browse files Browse the repository at this point in the history
…s class.
  • Loading branch information
thedarkone committed Jan 22, 2012
1 parent 7bb8d20 commit 1a6a57c
Showing 1 changed file with 9 additions and 4 deletions.
13 changes: 9 additions & 4 deletions lib/rack/utils.rb
Original file line number Diff line number Diff line change
Expand Up @@ -111,21 +111,26 @@ def normalize_params(params, name, v = nil)
child_key = $1
params[k] ||= []
raise TypeError, "expected Array (got #{params[k].class.name}) for param `#{k}'" unless params[k].is_a?(Array)
if params[k].last.is_a?(KeySpaceConstrainedParams) && !params[k].last.key?(child_key)
if params_hash_type?(params[k].last) && !params[k].last.key?(child_key)
normalize_params(params[k].last, child_key, v)
else
params[k] << normalize_params(KeySpaceConstrainedParams.new, child_key, v)
params[k] << normalize_params(params.class.new, child_key, v)
end
else
params[k] ||= KeySpaceConstrainedParams.new
raise TypeError, "expected Hash (got #{params[k].class.name}) for param `#{k}'" unless params[k].is_a?(KeySpaceConstrainedParams)
params[k] ||= params.class.new
raise TypeError, "expected Hash (got #{params[k].class.name}) for param `#{k}'" unless params_hash_type?(params[k])
params[k] = normalize_params(params[k], after, v)
end

return params
end
module_function :normalize_params

def params_hash_type?(obj)
obj.kind_of?(KeySpaceConstrainedParams) || obj.kind_of?(Hash)
end
module_function :params_hash_type?

def build_query(params)
params.map { |k, v|
if v.class == Array
Expand Down

0 comments on commit 1a6a57c

Please sign in to comment.