class GTX
def erb
def erb ERB.new(erb_source, trim_mode: '-').tap { |a| a.filename = filename } end
def erb_source
def erb_source template.strip.lines.map do |line| case line when /^\s*> ?(.*)/ then eval_vars $1 when /^\s*= ?(.*)/ then "<%= #{eval_vars $1.strip} %>" else "<%- #{line.strip} -%>" end end.join "\n" end
def eval_vars(string)
def eval_vars(string) string.gsub(/{{([^{].*?)}}/, '<%=\1%>') .gsub('\\}\\}', '}}') .gsub('\\{\\{', '{{') end
def initialize(template, filename: nil)
def initialize(template, filename: nil) @template = template @filename = filename end
def load_file(path, filename: nil)
def load_file(path, filename: nil) new File.read(path), filename: filename || path end
def parse(context = nil)
def parse(context = nil) context ||= self context = context.instance_eval { binding } unless context.is_a? Binding erb.result context end
def render(template, context: nil, filename: nil)
def render(template, context: nil, filename: nil) new(template, filename: filename).parse context end
def render_file(path, context: nil, filename: nil)
def render_file(path, context: nil, filename: nil) load_file(path, filename: filename).parse context end