mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
Include Memoizable in ActionView::Template
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user