From 35d0d82ae3edf8fe959624999c858a63b2b4ed52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Tue, 3 May 2011 01:36:58 +0200 Subject: More performance optimizations. --- .../lib/action_controller/metal/params_wrapper.rb | 30 ++++++++++++---------- .../lib/action_dispatch/http/filter_parameters.rb | 5 ---- 2 files changed, 17 insertions(+), 18 deletions(-) (limited to 'actionpack') 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) diff --git a/actionpack/lib/action_dispatch/http/filter_parameters.rb b/actionpack/lib/action_dispatch/http/filter_parameters.rb index 9c5b6a6b88..8dd1af7f3d 100644 --- a/actionpack/lib/action_dispatch/http/filter_parameters.rb +++ b/actionpack/lib/action_dispatch/http/filter_parameters.rb @@ -33,11 +33,6 @@ module ActionDispatch @filtered_parameters ||= parameter_filter.filter(parameters) end - # Clear any filtered parameters forcing them to be filtered again. - def clear_filtered_parameters - @filtered_parameters = nil - end - # Return a hash of request.env with all sensitive data replaced. def filtered_env @filtered_env ||= env_filter.filter(@env) -- cgit v1.2.3