aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_controller/metal/params_wrapper.rb
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2011-05-03 01:36:58 +0200
committerJosé Valim <jose.valim@gmail.com>2011-05-03 01:37:01 +0200
commit35d0d82ae3edf8fe959624999c858a63b2b4ed52 (patch)
tree0923571fb479d67416c8924efb8c7330acbc5da7 /actionpack/lib/action_controller/metal/params_wrapper.rb
parenta55f2de0c5baae589b1730df1e4068f0cd1474ce (diff)
downloadrails-35d0d82ae3edf8fe959624999c858a63b2b4ed52.tar.gz
rails-35d0d82ae3edf8fe959624999c858a63b2b4ed52.tar.bz2
rails-35d0d82ae3edf8fe959624999c858a63b2b4ed52.zip
More performance optimizations.
Diffstat (limited to 'actionpack/lib/action_controller/metal/params_wrapper.rb')
-rw-r--r--actionpack/lib/action_controller/metal/params_wrapper.rb30
1 files changed, 17 insertions, 13 deletions
diff --git a/actionpack/lib/action_controller/metal/params_wrapper.rb b/actionpack/lib/action_controller/metal/params_wrapper.rb
index d128f6d03c..21bbe17dc3 100644
--- a/actionpack/lib/action_controller/metal/params_wrapper.rb
+++ b/actionpack/lib/action_controller/metal/params_wrapper.rb
@@ -1,5 +1,6 @@
require 'active_support/core_ext/class/attribute'
require 'active_support/core_ext/hash/slice'
+require 'active_support/core_ext/hash/except'
require 'active_support/core_ext/array/wrap'
require 'action_dispatch/http/mime_types'
@@ -177,40 +178,43 @@ module ActionController
# by the metal call stack.
def process_action(*args)
if _wrapper_enabled?
- wrapped_hash = { _wrapper_key => request.request_parameters.slice(*_wrapped_keys) }
+ wrapped_hash = _wrap_parameters request.request_parameters
+ wrapped_filtered_hash = _wrap_parameters request.filtered_parameters
# This will make the wrapped hash accessible from controller and view
request.parameters.merge! wrapped_hash
request.request_parameters.merge! wrapped_hash
# This will make the wrapped hash displayed in the log file
- request.clear_filtered_parameters
+ request.filtered_parameters.merge! wrapped_filtered_hash
end
super
end
private
+
# Returns the wrapper key which will use to stored wrapped parameters.
def _wrapper_key
_wrapper_options[:name]
end
- # Returns the list of parameters which will be selected for wrapped.
- def _wrapped_keys
- @_wrapped_keys ||= if only = _wrapper_options[:only]
- only
- elsif except = _wrapper_options[:except]
- request.request_parameters.keys - except - EXCLUDE_PARAMETERS
- else
- request.request_parameters.keys - EXCLUDE_PARAMETERS
- end
- end
-
# Returns the list of enabled formats.
def _wrapper_formats
_wrapper_options[:format]
end
+ # Returns the list of parameters which will be selected for wrapped.
+ def _wrap_parameters(parameters)
+ value = if only = _wrapper_options[:only]
+ parameters.slice(*only)
+ else
+ except = _wrapper_options[:except] || []
+ parameters.except(*(except + EXCLUDE_PARAMETERS))
+ end
+
+ { _wrapper_key => value }
+ end
+
# Checks if we should perform parameters wrapping.
def _wrapper_enabled?
ref = request.content_mime_type.try(:ref)