0
@@ -9,6 +9,10 @@ module ActionView
0
include ActiveSupport::Memoizable
0
Template.handler_class_for_extension(extension)
0
@@ -35,35 +39,41 @@ module ActionView
0
- # Compile and evaluate the template's code
0
+ # Compile and evaluate the template's code
(if necessary)0
def compile(local_assigns)
0
render_symbol = method(local_assigns)
0
- return false unless recompile?(render_symbol)
0
+ if recompile?(render_symbol)
0
+ compile!(render_symbol, local_assigns)
0
- locals_code = local_assigns.keys.map { |key| "#{key} = local_assigns[:#{key}];" }.join
0
+ def compile!(render_symbol, local_assigns)
0
+ locals_code = local_assigns.keys.map { |key| "#{key} = local_assigns[:#{key}];" }.join
0
- def #{render_symbol}(local_assigns)
0
- old_output_buffer = output_buffer;#{locals_code};#{compiled_source}
0
- self.output_buffer = old_output_buffer
0
+ def #{render_symbol}(local_assigns)
0
+ old_output_buffer = output_buffer;#{locals_code};#{compiled_source}
0
+ self.output_buffer = old_output_buffer
0
- file_name = respond_to?(:filename) ? filename : 'compiled-template'
0
- ActionView::Base::CompiledTemplates.module_eval(source, file_name, 0)
0
- rescue Exception => e # errors from template code
0
- if logger = ActionController::Base.logger
0
- logger.debug "ERROR: compiling #{render_symbol} RAISED #{e}"
0
- logger.debug "Function body: #{source}"
0
- logger.debug "Backtrace: #{e.backtrace.join("\n")}"
0
+ logger = ActionController::Base.logger
0
+ logger.debug "Compiling template #{render_symbol}" if logger
0
- raise ActionView::TemplateError.new(self, {}, e)
0
+ ActionView::Base::CompiledTemplates.module_eval(source, filename, 0)
0
+ rescue Exception => e # errors from template code
0
+ logger.debug "ERROR: compiling #{render_symbol} RAISED #{e}"
0
+ logger.debug "Function body: #{source}"
0
+ logger.debug "Backtrace: #{e.backtrace.join("\n")}"
0
+ raise ActionView::TemplateError.new(self, {}, e)
0
@@ -71,8 +81,7 @@ module ActionView
0
# The template will be compiled if the file has not been compiled yet, or
0
# if local_assigns has a new key, which isn't supported by the compiled code yet.
0
- meth = Base::CompiledTemplates.instance_method(template.method) rescue nil
0
+ !(frozen? && Base::CompiledTemplates.method_defined?(symbol))