Skip to content

Commit

Permalink
[#966] support Rails 3-style block helpers
Browse files Browse the repository at this point in the history
  • Loading branch information
al2o3cr committed Sep 25, 2011
1 parent abb2120 commit 17011ac
Showing 1 changed file with 40 additions and 2 deletions.
42 changes: 40 additions & 2 deletions dryml/lib/dryml/dryml_builder.rb
Expand Up @@ -58,10 +58,48 @@ def render_page_source(src, local_names)
end


class Erubis < ::Erubis::Eruby
def add_preamble(src)

end

def add_text(src, text)
return if text.empty?
src << "self.output_buffer.safe_concat('" << escape_text(text) << "');"
end

BLOCK_EXPR = /\s+(do|\{)(\s*\|[^|]*\|)?\s*\Z/

def add_expr_literal(src, code)
if code =~ BLOCK_EXPR
src << 'self.output_buffer.append= ' << code
else
src << 'self.output_buffer.append= (' << code << ');'
end
end

def add_stmt(src, code)
# skip fallback code - it utterly destroys DRYML-generated ERB
super
end

def add_expr_escaped(src, code)
if code =~ BLOCK_EXPR
src << "self.output_buffer.safe_append= " << code
else
src << "self.output_buffer.safe_concat((" << code << ").to_s);"
end
end

def add_postamble(src)

end
end

def erb_process(erb_src)
trim_mode = ActionView::TemplateHandlers::ERB.erb_trim_mode
erb = ERB.new(erb_src, nil, trim_mode, "output_buffer")
res = erb.src.split(';')[1..-2].join(';')
erb = Erubis.new(erb_src, :trim_mode => trim_mode)
res = erb.src
if res.respond_to? :force_encoding
res.force_encoding(erb_src.encoding)
end
Expand Down

0 comments on commit 17011ac

Please sign in to comment.