lib/hobo/dryml/dryml_builder.rb in hobo-0.8.5 vs lib/hobo/dryml/dryml_builder.rb in hobo-0.8.6

- old
+ new

@@ -52,25 +52,24 @@ locals = local_names.map{|l| "#{l} = __local_assigns__[:#{l}];"}.join(' ') ("def render_page(__page_this__, __local_assigns__); " + "#{locals} new_object_context(__page_this__) do " + src + - "; _erbout; end; end") + "; output_buffer; end; end") end - def erb_process(erb_src) - # Strip off "_erbout = ''" from the beginning and "; _erbout" - # from the end, because we do things differently around - # here. (_erbout is defined as a method) - trim_mode = if defined?(ActionView::TemplateHandlers::ERB.erb_trim_mode) - ActionView::TemplateHandlers::ERB.erb_trim_mode - else - ActionView::Base.erb_trim_mode - end + def erb_process(erb_src, method_def=false) + trim_mode = ActionView::TemplateHandlers::ERB.erb_trim_mode + erb = ERB.new(erb_src, nil, trim_mode, "output_buffer") + src = erb.src[("output_buffer = '';").length..-("; output_buffer".length)] - ERB.new(erb_src, nil, trim_mode).src[("_erbout = '';").length..-("; _erbout".length)] + if method_def + src.sub /^\s*def.*?\(.*?\)/, '\0 __in_erb_template=true; ' + else + "__in_erb_template=true; " + src + end end def build(local_names, auto_taglibs, src_mtime) @@ -81,10 +80,10 @@ case instruction[:type] when :eval @environment.class_eval(instruction[:src], template_path, instruction[:line_num]) when :def - src = erb_process(instruction[:src]) + src = erb_process(instruction[:src], true) @environment.class_eval(src, template_path, instruction[:line_num]) when :render_page method_src = render_page_source(erb_process(instruction[:src]), local_names) @environment.compiled_local_names = local_names