Sha256: a86d00d43ac6f905d6683619d7fcfdade85dd018e2bf25926dfde723facb3746

Contents?: true

Size: 581 Bytes

Versions: 3

Compression:

Stored size: 581 Bytes

Contents

require 'mustache'
module HSQL
  class Template < Struct.new(:input)
    def variable_names
      extract_variable_names(ast).uniq
    end

    def render(hash)
      Mustache.render(input, hash)
    end

    private

    # See Mustache::Generator#compile! for reference code
    def extract_variable_names(tree)
      return unless tree.is_a?(Array)
      if tree[1] == :fetch
        tree.last.first
      else
        tree.map { |token| extract_variable_names(token) }.compact.flatten
      end
    end

    def ast
      ::Mustache::Parser.new.compile(input)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
hsql-0.2.1 lib/hsql/template.rb
hsql-0.2.0 lib/hsql/template.rb
hsql-0.1.0 lib/hsql/template.rb