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