aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/lib')
-rw-r--r--actionpack/lib/action_view/renderable.rb15
-rw-r--r--actionpack/lib/action_view/renderable_partial.rb15
-rw-r--r--actionpack/lib/action_view/template.rb40
3 files changed, 27 insertions, 43 deletions
diff --git a/actionpack/lib/action_view/renderable.rb b/actionpack/lib/action_view/renderable.rb
index 4fda408367..9185045adf 100644
--- a/actionpack/lib/action_view/renderable.rb
+++ b/actionpack/lib/action_view/renderable.rb
@@ -7,20 +7,17 @@ module ActionView
@@mutex = Mutex.new
end
+ include ActiveSupport::Memoizable
+
def handler
- @handler ||= Template.handler_class_for_extension(extension)
+ Template.handler_class_for_extension(extension)
end
+ memorize :handler
def compiled_source
- @compiled_source ||= handler.new(nil).compile(self) if handler.compilable?
- end
-
- def freeze
- # Eager load and freeze memoized methods
- handler.freeze
- compiled_source.freeze
- super
+ handler.new(nil).compile(self) if handler.compilable?
end
+ memorize :compiled_source
def render(view, local_assigns = {})
view._first_render ||= self
diff --git a/actionpack/lib/action_view/renderable_partial.rb b/actionpack/lib/action_view/renderable_partial.rb
index 7b51eccc27..d2fe635b9c 100644
--- a/actionpack/lib/action_view/renderable_partial.rb
+++ b/actionpack/lib/action_view/renderable_partial.rb
@@ -3,20 +3,17 @@ module ActionView
# NOTE: The template that this mixin is beening include into is frozen
# So you can not set or modify any instance variables
+ include ActiveSupport::Memoizable
+
def variable_name
- @variable_name ||= name.sub(/\A_/, '').to_sym
+ name.sub(/\A_/, '').to_sym
end
+ memorize :variable_name
def counter_name
- @counter_name ||= "#{variable_name}_counter".to_sym
- end
-
- def freeze
- # Eager load and freeze memoized methods
- variable_name.freeze
- counter_name.freeze
- super
+ "#{variable_name}_counter".to_sym
end
+ memorize :counter_name
def render(view, local_assigns = {})
ActionController::Base.benchmark("Rendered #{path_without_format_and_extension}", Logger::DEBUG, false) do
diff --git a/actionpack/lib/action_view/template.rb b/actionpack/lib/action_view/template.rb
index 42659efbd4..b39ba0c48b 100644
--- a/actionpack/lib/action_view/template.rb
+++ b/actionpack/lib/action_view/template.rb
@@ -1,6 +1,7 @@
module ActionView #:nodoc:
class Template
extend TemplateHandlers
+ include ActiveSupport::Memoizable
include Renderable
attr_accessor :filename, :load_path, :base_path, :name, :format, :extension
@@ -16,48 +17,37 @@ module ActionView #:nodoc:
extend RenderablePartial if @name =~ /^_/
end
- def freeze
- # Eager load and freeze memoized methods
- format_and_extension.freeze
- path.freeze
- path_without_extension.freeze
- path_without_format_and_extension.freeze
- source.freeze
- method_segment.freeze
-
- super
- end
-
def format_and_extension
- @format_and_extension ||= (extensions = [format, extension].compact.join(".")).blank? ? nil : extensions
+ (extensions = [format, extension].compact.join(".")).blank? ? nil : extensions
end
+ memorize :format_and_extension
def path
- @path ||= [base_path, [name, format, extension].compact.join('.')].compact.join('/')
+ [base_path, [name, format, extension].compact.join('.')].compact.join('/')
end
+ memorize :path
def path_without_extension
- @path_without_extension ||= [base_path, [name, format].compact.join('.')].compact.join('/')
+ [base_path, [name, format].compact.join('.')].compact.join('/')
end
+ memorize :path_without_extension
def path_without_format_and_extension
- @path_without_format_and_extension ||= [base_path, name].compact.join('/')
+ [base_path, name].compact.join('/')
end
+ memorize :path_without_format_and_extension
def source
- @source ||= File.read(filename)
+ File.read(filename)
end
+ memorize :source
def method_segment
- unless @method_segment
- segment = File.expand_path(filename)
- segment.sub!(/^#{Regexp.escape(File.expand_path(RAILS_ROOT))}/, '') if defined?(RAILS_ROOT)
- segment.gsub!(/([^a-zA-Z0-9_])/) { $1.ord }
- @method_segment = segment
- end
-
- @method_segment
+ segment = File.expand_path(filename)
+ segment.sub!(/^#{Regexp.escape(File.expand_path(RAILS_ROOT))}/, '') if defined?(RAILS_ROOT)
+ segment.gsub!(/([^a-zA-Z0-9_])/) { $1.ord }
end
+ memorize :method_segment
def render_template(view, local_assigns = {})
render(view, local_assigns)