aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2013-11-06 14:21:40 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2013-11-06 14:21:40 -0800
commit267e5c84f96b96f8eac9f4a3dcdce5bc1b82541c (patch)
tree1d04c31abe1fc5117e5fe198aaf6c2c790aad1af /actionpack/lib
parentc8b566d54da278a8e675115bcf2e9590f75f5eb5 (diff)
downloadrails-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.rb10
-rw-r--r--actionpack/lib/action_controller/base.rb13
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