class Teer::Parser
Public Class Methods
new()
click to toggle source
# File lib/teer/parser.rb, line 5 def initialize @helpers = {} end
Public Instance Methods
register_helper(func, &fn)
click to toggle source
# File lib/teer/parser.rb, line 9 def register_helper(func, &fn) @helpers[func.to_sym] = fn end
render(template = '', ctx = {})
click to toggle source
# File lib/teer/parser.rb, line 13 def render(template = '', ctx = {}) rendered_template = template.dup template.scan(/{{\s*[\w\. ]+\s*}}/).map do |substr| key, func = parse_func(substr) value = value_from_ctx(ctx, key) if func raise ArgumentError, "Missing helper: '#{func}'" if !@helpers[func.to_sym] value = @helpers[func.to_sym].call(ctx, value) end rendered_template[substr] = value.to_s end rendered_template end
Private Instance Methods
parse_func(substr)
click to toggle source
# File lib/teer/parser.rb, line 29 def parse_func(substr) # if multiple and function split = substr.gsub(/{|}/, '').split.reverse if split.size == 2 split else split.first end end
value_from_ctx(ctx, key)
click to toggle source
# File lib/teer/parser.rb, line 38 def value_from_ctx(ctx, key) split = key.split('.')# currently only support . function calls value = ctx[split.shift.to_sym] split.each do |func| value = value.send(func) end raise ArgumentError, "Could not parse variable: '#{key}'" if !value value end