class Temple::Engines::ERB
template.result # => “2”
template = Temple::Engine::ERB.new(“<%= 1 + 1 %>”)
require ‘temple’
An engine which works in-place for ERB:
def self.rock!
Temple::Engine::ERB.rock!
require 'temple'
Example:
Sets the ERB constant to Temple::Engine::ERB
def self.rock! Object.send(:remove_const, :ERB) Object.send(:const_set, :ERB, self) end
def self.suck!
def self.suck! Object.send(:remove_const, :ERB) Object.send(:const_set, :ERB, OriginalERB) end
def detect_magic_comment(s)
def detect_magic_comment(s) if /\A<%#(.*)%>/ =~ s or (percent? and /\A%#(.*)/ =~ s) comment = $1 comment = $1 if comment[/-\*-\s*(.*?)\s*-*-$/] if %r"coding\s*[=:]\s*([[:alnum:]\-_]+)" =~ comment enc = $1.sub(/-(?:mac|dos|unix)/i, '') enc = Encoding.find(enc) end end end
def initialize(str, safe_level = nil, trim_mode = nil, eoutvar = '_erbout', options = {})
def initialize(str, safe_level = nil, trim_mode = nil, eoutvar = '_erbout', options = {}) @safe_level = safe_level @trim_mode = trim_mode @parser = Parsers::ERB.new(:trim_mode => @trim_mode) @generator = options[:generator] || Core::ArrayBuffer if @generator.is_a?(Class) @generator = @generator.new(:buffer => eoutvar) end @sexp = @parser.compile(str) @optimized_sexp = Optimizers.inject(@sexp) { |m, e| e.compile(m) } @src = @generator.compile(@optimized_sexp) if str.respond_to?(:encoding) @enc = detect_magic_comment(str) || str.encoding @src.insert(0, "#coding:#{@enc}\n") @src << ".force_encoding(__ENCODING__)" end end
def percent?
def percent? @trim_mode.is_a?(String) and @trim_mode.include?("%") end