Skip to content

Commit

Permalink
fix buffer logic, use ContextualBuffer instead of SafeBuffer
Browse files Browse the repository at this point in the history
  • Loading branch information
igrigorik committed Nov 9, 2011
1 parent bd3d61c commit a58c5df
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 23 deletions.
7 changes: 7 additions & 0 deletions lib/contextual/contextual.rb
Expand Up @@ -54,10 +54,17 @@ def initialize
def writeSafe(code) def writeSafe(code)
@buf.writeSafe(code) @buf.writeSafe(code)
end end
alias :writeSafe= :writeSafe
alias :append= :writeSafe
alias :concat :writeSafe
alias :<< :writeSafe


def write(code) def write(code)
@buf.write(code) @buf.write(code)
end end
alias :write= :write
alias :safe_append= :write
alias :safe_concat :write


def to_s def to_s
@writer.to_s @writer.to_s
Expand Down
37 changes: 14 additions & 23 deletions lib/contextual/rails_erubis.rb
Expand Up @@ -48,55 +48,46 @@ class SafeErubis < ::Erubis::Eruby


def add_preamble(src) def add_preamble(src)
src << "@output_buffer = output_buffer || Erubis::ContextualBuffer.new; " src << "@output_buffer = output_buffer || Erubis::ContextualBuffer.new; "
p [:safe_add_preamble, src]
end end


def add_text(src, text) def add_text(src, text)
if !text.empty? if !text.empty?
p [:safe_add_text, text] src << "@output_buffer.concat('" << text.to_s.gsub("'", "\\\\'") << "');"
src << "@output_buffer.writeSafe '" << text.to_s.gsub("'", "\\\\'") << "';"
end end
end end


def add_stmt(src, code)
src << code
src << ';' unless code[-1] == ?\n
end

def add_expr_escaped(src, code)
p [:safe_add_expr_escaped, code]
src << " @output_buffer.write((" << code << ').to_s);'
end

def add_expr_literal(src, code) def add_expr_literal(src, code)
if code =~ BLOCK_EXPR if code =~ BLOCK_EXPR
p [:safe_add_expr_literal, :block, code] src << '@output_buffer.append= ' << code
src << '@output_buffer.write ' << code
else else
p [:safe_add_expr_literal, :no_block, code] src << <<-SRC
src << '@output_buffer.write(' << code << ');' val = (#{code.to_s});
if (val.html_safe?);
@output_buffer.append=(val);
else;
@output_buffer.safe_append=(val);
end;
SRC
end end
end end


def add_expr_escaped(src, code) def add_expr_escaped(src, code)
if code =~ BLOCK_EXPR if code =~ BLOCK_EXPR
p [:safe_add_expr_escaped, :block, code] src << "@output_buffer.append= " << code
src << "@output_buffer.write " << code
else else
p [:safe_add_expr_escaped, :no_block, code] src << "@output_buffer.append(" << code << ");"
src << "@output_buffer.write(" << code << ");"
end end
end end


def add_postamble(src) def add_postamble(src)
p [:add_postamble, src]
src << "@output_buffer.close \n" src << "@output_buffer.close \n"
src << "p [:CONTEXTUAL, @output_buffer.to_s]\n" src << "p [:CONTEXTUAL,@output_buffer, @output_buffer.to_s, @output_buffer.to_s.html_safe.html_safe?]\n"
src << "@output_buffer.to_s.html_safe" src << "@output_buffer.to_s.html_safe"
end end
end end


ERB.erb_implementation = SafeErubis ERB.erb_implementation = SafeErubis
ActionView::OutputBuffer = ::Erubis::ContextualBuffer


end end
end end
Expand Down

0 comments on commit a58c5df

Please sign in to comment.