Do not discard query parameters on requests that use wrap_parameters
This commit is contained in:
parent
b9cd5a29dd
commit
1f9586fd47
|
@ -1,3 +1,8 @@
|
||||||
|
* Do not discard query parameters that form a hash with the same root key as
|
||||||
|
the wrapper_key for a request using wrap_parameters
|
||||||
|
|
||||||
|
*Josh Jordan*
|
||||||
|
|
||||||
* Ensure that `request.filtered_parameters` is reset between calls to `process`
|
* Ensure that `request.filtered_parameters` is reset between calls to `process`
|
||||||
in `ActionController::TestCase`.
|
in `ActionController::TestCase`.
|
||||||
|
|
||||||
|
|
|
@ -231,7 +231,12 @@ module ActionController
|
||||||
# by the metal call stack.
|
# by the metal call stack.
|
||||||
def process_action(*args)
|
def process_action(*args)
|
||||||
if _wrapper_enabled?
|
if _wrapper_enabled?
|
||||||
wrapped_hash = _wrap_parameters request.request_parameters
|
if request.parameters[_wrapper_key].present?
|
||||||
|
wrapped_hash = _extract_parameters(request.parameters)
|
||||||
|
else
|
||||||
|
wrapped_hash = _wrap_parameters request.request_parameters
|
||||||
|
end
|
||||||
|
|
||||||
wrapped_keys = request.request_parameters.keys
|
wrapped_keys = request.request_parameters.keys
|
||||||
wrapped_filtered_hash = _wrap_parameters request.filtered_parameters.slice(*wrapped_keys)
|
wrapped_filtered_hash = _wrap_parameters request.filtered_parameters.slice(*wrapped_keys)
|
||||||
|
|
||||||
|
@ -259,14 +264,16 @@ module ActionController
|
||||||
|
|
||||||
# Returns the list of parameters which will be selected for wrapped.
|
# Returns the list of parameters which will be selected for wrapped.
|
||||||
def _wrap_parameters(parameters)
|
def _wrap_parameters(parameters)
|
||||||
value = if include_only = _wrapper_options.include
|
{ _wrapper_key => _extract_parameters(parameters) }
|
||||||
|
end
|
||||||
|
|
||||||
|
def _extract_parameters(parameters)
|
||||||
|
if include_only = _wrapper_options.include
|
||||||
parameters.slice(*include_only)
|
parameters.slice(*include_only)
|
||||||
else
|
else
|
||||||
exclude = _wrapper_options.exclude || []
|
exclude = _wrapper_options.exclude || []
|
||||||
parameters.except(*(exclude + EXCLUDE_PARAMETERS))
|
parameters.except(*(exclude + EXCLUDE_PARAMETERS))
|
||||||
end
|
end
|
||||||
|
|
||||||
{ _wrapper_key => value }
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Checks if we should perform parameters wrapping.
|
# Checks if we should perform parameters wrapping.
|
||||||
|
|
|
@ -188,6 +188,26 @@ class ParamsWrapperTest < ActionController::TestCase
|
||||||
assert_parameters({ 'username' => 'sikachu', 'title' => 'Developer', 'user' => { 'username' => 'sikachu', 'title' => 'Developer' }})
|
assert_parameters({ 'username' => 'sikachu', 'title' => 'Developer', 'user' => { 'username' => 'sikachu', 'title' => 'Developer' }})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_preserves_query_string_params
|
||||||
|
with_default_wrapper_options do
|
||||||
|
@request.env['CONTENT_TYPE'] = 'application/json'
|
||||||
|
get :parse, { 'user' => { 'username' => 'nixon' } }
|
||||||
|
assert_parameters(
|
||||||
|
{'user' => { 'username' => 'nixon' } }
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_empty_parameter_set
|
||||||
|
with_default_wrapper_options do
|
||||||
|
@request.env['CONTENT_TYPE'] = 'application/json'
|
||||||
|
post :parse, {}
|
||||||
|
assert_parameters(
|
||||||
|
{'user' => { } }
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class NamespacedParamsWrapperTest < ActionController::TestCase
|
class NamespacedParamsWrapperTest < ActionController::TestCase
|
||||||
|
|
Loading…
Reference in New Issue