padrino-helpers/lib/padrino/rendering/erubi_template.rb
module Padrino
module Rendering
module Erubi
module SafeBufferEnhancer
def add_expression_result(code)
@src << " @__in_ruby_literal = true; #{bufvar}.concat((" << code << ').to_s); @__in_ruby_literal = false;'
end
def add_expression_result_escaped(code)
@src << " #{bufvar}.safe_concat (" << code << ");"
end
def add_text(text)
@src << " #{bufvar}.safe_concat '" << text.gsub(/['\\]/, '\\\\\&') << "';" unless text.empty?
end
end
end
class SafeErubi < ::Erubi::Engine
include Erubi::SafeBufferEnhancer
end
class ErubiTemplate < Tilt::ErubiTemplate
def precompiled_preamble(*)
"__in_erb_template = true\n" << super
end
end
end
end
Tilt.prefer(Padrino::Rendering::ErubiTemplate, :erb)
Padrino::Rendering.engine_configurations[:erb] = {
:bufval => "SafeBuffer.new",
:bufvar => "@_out_buf",
:engine_class => Padrino::Rendering::SafeErubi
}