Skip to content
Browse files

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
  • Loading branch information...
1 parent c8b566d commit 267e5c84f96b96f8eac9f4a3dcdce5bc1b82541c @tenderlove tenderlove committed
View
6 actionmailer/lib/action_mailer/base.rb
@@ -373,7 +373,11 @@ class Base < AbstractController::Base
include AbstractController::AssetPaths
include AbstractController::Callbacks
- self.protected_instance_variables = [:@_action_has_layout]
+ PROTECTED_IVARS = AbstractController::Rendering::DEFAULT_PROTECTED_INSTANCE_VARIABLES + [:@_action_has_layout]
+
+ def _protected_ivars # :nodoc:
+ PROTECTED_IVARS
+ end
helper ActionMailer::MailHelper
View
10 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 @@ def initialize(message = nil)
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 @@ def rendered_format
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 @@ def _normalize_render(*args, &block)
end
def _protected_ivars # :nodoc:
- DEFAULT_PROTECTED_INSTANCE_VARIABLES + protected_instance_variables
+ DEFAULT_PROTECTED_INSTANCE_VARIABLES
end
end
end
View
13 actionpack/lib/action_controller/base.rb
@@ -261,10 +261,17 @@ def self.without_modules(*modules)
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

0 comments on commit 267e5c8

Please sign in to comment.
Something went wrong with that request. Please try again.