diff options
Diffstat (limited to 'actionpack/lib')
-rw-r--r-- | actionpack/lib/action_view/base.rb | 24 | ||||
-rw-r--r-- | actionpack/lib/action_view/template_handler.rb | 12 | ||||
-rw-r--r-- | actionpack/lib/action_view/template_handlers/builder.rb | 4 | ||||
-rw-r--r-- | actionpack/lib/action_view/template_handlers/erb.rb | 4 | ||||
-rw-r--r-- | actionpack/lib/action_view/template_handlers/rjs.rb | 4 |
5 files changed, 30 insertions, 18 deletions
diff --git a/actionpack/lib/action_view/base.rb b/actionpack/lib/action_view/base.rb index 6fde9ccf73..34572e442d 100644 --- a/actionpack/lib/action_view/base.rb +++ b/actionpack/lib/action_view/base.rb @@ -252,7 +252,7 @@ module ActionView #:nodoc: @@default_template_handlers = klass end - def self.handler_for_extension(extension) + def self.handler_class_for_extension(extension) (extension && @@template_handlers[extension.to_sym]) || @@default_template_handlers end @@ -361,13 +361,13 @@ If you are rendering a subtemplate, you must now use controller-like partial syn # Renders the +template+ which is given as a string as either erb or builder depending on <tt>template_extension</tt>. # The hash in <tt>local_assigns</tt> is made available as local variables. def render_template(template_extension, template, file_path = nil, local_assigns = {}) #:nodoc: - handler = self.class.handler_for_extension(template_extension) + handler = self.class.handler_class_for_extension(template_extension).new(self) - if template_handler_is_compilable?(handler) + if handler.compilable? compile_and_render_template(handler, template, file_path, local_assigns) else template ||= read_template_file(file_path, template_extension) # Make sure that a lazyily-read template is loaded. - delegate_render(handler, template, local_assigns) + handler.render(template, local_assigns) end end @@ -513,18 +513,6 @@ If you are rendering a subtemplate, you must now use controller-like partial syn end end - def delegate_render(handler, template, local_assigns) - handler.new(self).render(template, local_assigns) - end - - def delegate_compile(handler, template) - handler.new(self).compile(template) - end - - def template_handler_is_compilable?(handler) - handler.new(self).respond_to?(:compile) - end - # Assigns instance variables from the controller to the view. def assign_variables_from_controller @assigns.each { |key, value| instance_variable_set("@#{key}", value) } @@ -565,7 +553,7 @@ If you are rendering a subtemplate, you must now use controller-like partial syn # Method to create the source code for a given template. def create_template_source(handler, template, render_symbol, locals) - body = delegate_compile(handler, template) + body = handler.compile(template) @@template_args[render_symbol] ||= {} locals_keys = @@template_args[render_symbol].keys | locals @@ -585,7 +573,7 @@ If you are rendering a subtemplate, you must now use controller-like partial syn end def compiled_method_name(handler, template, file_name) - ['_run', handler.to_s.demodulize.underscore, compiled_method_name_file_path_segment(file_name)].compact.join('_').to_sym + ['_run', handler.class.to_s.demodulize.underscore, compiled_method_name_file_path_segment(file_name)].compact.join('_').to_sym end def compiled_method_name_file_path_segment(file_name) diff --git a/actionpack/lib/action_view/template_handler.rb b/actionpack/lib/action_view/template_handler.rb index 8ce31ade49..b2c6ff3e36 100644 --- a/actionpack/lib/action_view/template_handler.rb +++ b/actionpack/lib/action_view/template_handler.rb @@ -4,6 +4,10 @@ module ActionView 0 end + def self.compilable? + false + end + def initialize(view) @view = view end @@ -14,6 +18,14 @@ module ActionView def compile(template) end + def compilable? + self.class.compilable? + end + + def line_offset + self.class.line_offset + end + # Called by CacheHelper#cache def cache_fragment(block, name = {}, options = nil) end diff --git a/actionpack/lib/action_view/template_handlers/builder.rb b/actionpack/lib/action_view/template_handlers/builder.rb index 88044917dd..098c90f5c7 100644 --- a/actionpack/lib/action_view/template_handlers/builder.rb +++ b/actionpack/lib/action_view/template_handlers/builder.rb @@ -7,6 +7,10 @@ module ActionView 2 end + def self.compilable? + true + end + def compile(template) content_type_handler = (@view.send!(:controller).respond_to?(:response) ? "controller.response" : "controller") "#{content_type_handler}.content_type ||= Mime::XML\n" + diff --git a/actionpack/lib/action_view/template_handlers/erb.rb b/actionpack/lib/action_view/template_handlers/erb.rb index 26cca586ba..ffc1ab0e97 100644 --- a/actionpack/lib/action_view/template_handlers/erb.rb +++ b/actionpack/lib/action_view/template_handlers/erb.rb @@ -26,6 +26,10 @@ module ActionView ::ERB.new(template, nil, @view.erb_trim_mode).src end + def self.compilable? + true + end + def cache_fragment(block, name = {}, options = nil) #:nodoc: @view.fragment_for(block, name, options) do eval(ActionView::Base.erb_variable, block.binding) diff --git a/actionpack/lib/action_view/template_handlers/rjs.rb b/actionpack/lib/action_view/template_handlers/rjs.rb index bd51cc4d39..e4b3d0c2a6 100644 --- a/actionpack/lib/action_view/template_handlers/rjs.rb +++ b/actionpack/lib/action_view/template_handlers/rjs.rb @@ -10,6 +10,10 @@ module ActionView "update_page do |page|\n#{template}\nend" end + def self.compilable? + true + end + def cache_fragment(block, name = {}, options = nil) #:nodoc: @view.fragment_for(block, name, options) do begin |