diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2013-11-06 14:21:40 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2013-11-06 14:21:40 -0800 |
commit | 267e5c84f96b96f8eac9f4a3dcdce5bc1b82541c (patch) | |
tree | 1d04c31abe1fc5117e5fe198aaf6c2c790aad1af /actionpack/lib | |
parent | c8b566d54da278a8e675115bcf2e9590f75f5eb5 (diff) | |
download | rails-267e5c84f96b96f8eac9f4a3dcdce5bc1b82541c.tar.gz rails-267e5c84f96b96f8eac9f4a3dcdce5bc1b82541c.tar.bz2 rails-267e5c84f96b96f8eac9f4a3dcdce5bc1b82541c.zip |
calculate the ivars to remove in advance as a set and cache them in a
constant.
`view_assigns` can use the precalculated sets and remove instance
variables without allocating any extra arrays
Diffstat (limited to 'actionpack/lib')
-rw-r--r-- | actionpack/lib/abstract_controller/rendering.rb | 10 | ||||
-rw-r--r-- | actionpack/lib/action_controller/base.rb | 13 |
2 files changed, 12 insertions, 11 deletions
diff --git a/actionpack/lib/abstract_controller/rendering.rb b/actionpack/lib/abstract_controller/rendering.rb index 9d2199a7b1..fb8f40cb9b 100644 --- a/actionpack/lib/abstract_controller/rendering.rb +++ b/actionpack/lib/abstract_controller/rendering.rb @@ -1,5 +1,6 @@ require 'active_support/concern' require 'active_support/core_ext/class/attribute' +require 'set' module AbstractController class DoubleRenderError < Error @@ -13,11 +14,6 @@ module AbstractController module Rendering extend ActiveSupport::Concern - included do - class_attribute :protected_instance_variables - self.protected_instance_variables = [] - end - # Normalize arguments, options and then delegates render_to_body and # sticks the result in self.response_body. # :api: public @@ -55,8 +51,6 @@ module AbstractController Mime::TEXT end - require 'set' - DEFAULT_PROTECTED_INSTANCE_VARIABLES = Set.new %w( @_action_name @_response_body @_formats @_prefixes @_config @_view_context_class @_view_renderer @_lookup_context @@ -113,7 +107,7 @@ module AbstractController end def _protected_ivars # :nodoc: - DEFAULT_PROTECTED_INSTANCE_VARIABLES + protected_instance_variables + DEFAULT_PROTECTED_INSTANCE_VARIABLES end end end diff --git a/actionpack/lib/action_controller/base.rb b/actionpack/lib/action_controller/base.rb index 3b0d094f4f..c84776ab7a 100644 --- a/actionpack/lib/action_controller/base.rb +++ b/actionpack/lib/action_controller/base.rb @@ -261,10 +261,17 @@ module ActionController end # Define some internal variables that should not be propagated to the view. - self.protected_instance_variables = [ + PROTECTED_IVARS = AbstractController::Rendering::DEFAULT_PROTECTED_INSTANCE_VARIABLES + [ :@_status, :@_headers, :@_params, :@_env, :@_response, :@_request, - :@_view_runtime, :@_stream, :@_url_options, :@_action_has_layout - ] + :@_view_runtime, :@_stream, :@_url_options, :@_action_has_layout ] + + def _protected_ivars # :nodoc: + PROTECTED_IVARS + end + + def self.protected_instance_variables + PROTECTED_IVARS + end ActiveSupport.run_load_hooks(:action_controller, self) end |