提交 dd41f66a 编写于 作者: J Joshua Peek

Include Memoizable in ActionView::Template

上级 8a9934a9
......@@ -7,20 +7,17 @@ def self.included(base)
@@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
......
......@@ -3,20 +3,17 @@ module RenderablePartial
# 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
......
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 @@ def initialize(template_path, load_paths = [])
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)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册