提交 39ba2da8 编写于 作者: J Joshua Peek

Moved complied method name logic into Renderable

上级 1dcc5912
......@@ -2,6 +2,10 @@ module ActionView #:nodoc:
class InlineTemplate #:nodoc:
include Renderable
# Count the number of inline templates
cattr_accessor :inline_template_count
@@inline_template_count = 0
def initialize(view, source, locals = {}, type = nil)
@view = view
......@@ -12,5 +16,11 @@ def initialize(view, source, locals = {}, type = nil)
@method_key = @source
@handler = Template.handler_class_for_extension(@extension).new(@view)
end
private
# FIXME: Modifying this shared variable may not thread safe
def method_name_path_segment
"inline_#{@@inline_template_count += 1}"
end
end
end
......@@ -11,6 +11,10 @@ def render
@handler.render(self)
end
def method_name
['_run', @extension, method_name_path_segment].compact.join('_').to_sym
end
private
def prepare!
unless @prepared
......
......@@ -37,7 +37,7 @@ def render_template
end
def source
@source ||= File.read(self.filename)
@source ||= File.read(@filename)
end
def base_path_for_exception
......@@ -71,5 +71,12 @@ def raise_missing_template_exception
template_type = (@original_path =~ /layouts/i) ? 'layout' : 'template'
raise MissingTemplate, "Missing #{template_type} #{full_template_path} in view path #{display_paths}"
end
def method_name_path_segment
s = File.expand_path(@filename)
s.sub!(/^#{Regexp.escape(File.expand_path(RAILS_ROOT))}/, '') if defined?(RAILS_ROOT)
s.gsub!(/([^a-zA-Z0-9_])/) { $1.ord }
s
end
end
end
module ActionView
module TemplateHandlers
module Compilable
def self.included(base)
base.extend ClassMethod
......@@ -12,10 +11,6 @@ def self.included(base)
# Map method names to the names passed in local assigns so far
base.cattr_accessor :template_args
base.template_args = {}
# Count the number of inline templates
base.cattr_accessor :inline_template_count
base.inline_template_count = 0
end
module ClassMethod
......@@ -24,7 +19,7 @@ def compilable?
true
end
end
def render(template)
@view.send :execute, template
end
......@@ -75,22 +70,7 @@ def compile_template?(template)
end
def assign_method_name(template)
@view.method_names[template.method_key] ||= compiled_method_name(template)
end
def compiled_method_name(template)
['_run', self.class.to_s.demodulize.underscore, compiled_method_name_file_path_segment(template.filename)].compact.join('_').to_sym
end
def compiled_method_name_file_path_segment(file_name)
if file_name
s = File.expand_path(file_name)
s.sub!(/^#{Regexp.escape(File.expand_path(RAILS_ROOT))}/, '') if defined?(RAILS_ROOT)
s.gsub!(/([^a-zA-Z0-9_])/) { $1.ord }
s
else
(self.inline_template_count += 1).to_s
end
@view.method_names[template.method_key] ||= template.method_name
end
# Method to create the source code for a given template.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册