提交 ab491134 编写于 作者: E Eugene Kenny

Don't wrap parameters if query parameter exists

We want to avoid overwriting a query parameter with the wrapped
parameters hash. Previously this was implemented by merging the wrapped
parameters at the root level if the key already existed, which was
effectively a no-op. The query parameter was still overwritten in the
filtered parameters hash, however.

We can fix that discrepancy with a simpler implementation and less
unnecessary work by skipping parameter wrapping entirely if the key was
sent as a query parameter.
上级 98d12f1e
......@@ -232,12 +232,7 @@ def inherited(klass)
# by the metal call stack.
def process_action(*args)
if _wrapper_enabled?
if request.parameters[_wrapper_key].present?
wrapped_hash = _extract_parameters(request.parameters)
else
wrapped_hash = _wrap_parameters request.request_parameters
end
wrapped_hash = _wrap_parameters request.request_parameters
wrapped_keys = request.request_parameters.keys
wrapped_filtered_hash = _wrap_parameters request.filtered_parameters.slice(*wrapped_keys)
......@@ -282,7 +277,7 @@ def _wrapper_enabled?
return false unless request.has_content_type?
ref = request.content_mime_type.ref
_wrapper_formats.include?(ref) && _wrapper_key && !request.request_parameters.key?(_wrapper_key)
_wrapper_formats.include?(ref) && _wrapper_key && !request.parameters.key?(_wrapper_key)
end
end
end
......@@ -226,6 +226,14 @@ def test_preserves_query_string_params
end
end
def test_preserves_query_string_params_in_filtered_params
with_default_wrapper_options do
@request.env["CONTENT_TYPE"] = "application/json"
get :parse, params: { "user" => { "username" => "nixon" } }
assert_equal({ "controller" => "params_wrapper_test/users", "action" => "parse", "user" => { "username" => "nixon" } }, @request.filtered_parameters)
end
end
def test_empty_parameter_set
with_default_wrapper_options do
@request.env["CONTENT_TYPE"] = "application/json"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册