Sha256: 5964d7e581a33154e0c6489bfe2b1afc82ab382f0241c46d7c26179765fb6f46
Contents?: true
Size: 1.78 KB
Versions: 3
Compression:
Stored size: 1.78 KB
Contents
require 'cgi' require 'mustache/parser' require 'mustache/generator' class Mustache # A Template represents a Mustache template. It compiles and caches # a raw string template into something usable. # # The idea is this: when handed a Mustache template, convert it into # a Ruby string by transforming Mustache tags into interpolated # Ruby. # # You shouldn't use this class directly, instead: # # >> Mustache.render(template, hash) class Template # Expects a Mustache template as a string along with a template # path, which it uses to find partials. def initialize(source) @source = source @tmpid = 0 end # Renders the `@source` Mustache template using the given # `context`, which should be a simple hash keyed with symbols. # # The first time a template is rendered, this method is overriden # and from then on it is "compiled". Subsequent calls will skip # the compilation step and run the Ruby version of the template # directly. def render(context) # Compile our Mustache template into a Ruby string compiled = "def render(ctx) #{compile} end" # Here we rewrite ourself with the interpolated Ruby version of # our Mustache template so subsequent calls are very fast and # can skip the compilation stage. instance_eval(compiled, __FILE__, __LINE__ - 1) # Call the newly rewritten version of #render render(context) end # Does the dirty work of transforming a Mustache template into an # interpolation-friendly Ruby string. def compile(src = @source) Generator.new.compile(tokens) end alias_method :to_s, :compile # Returns an array of tokens for a given template. def tokens(src = @source) Parser.new.compile(src) end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
mustache-0.9.2 | lib/mustache/template.rb |
mustache-0.9.1 | lib/mustache/template.rb |
mustache-0.9.0 | lib/mustache/template.rb |