Packages

Debugging tool. A wrapper around IO.inspect that provides some enhancements

Current section

Files

Jump to
clouseau lib template_engine.ex
Raw

lib/template_engine.ex

defmodule Clouseau.TemplateEngine do
use EEx.Engine
def handle_text(buffer, _text) do
quote do: unquote(buffer)
end
@spec handle_assign(Macro.t) :: Macro.t
def handle_assign({:@, meta, [{name, _, atom}]}) when is_atom(name) and is_atom(atom) do
line = meta[:line] || 0
quote line: line, do: Clouseau.TemplateEngine.get_assign(var!(assigns), unquote(name))
end
def handle_assign({:has_val?, meta, [{name, _, atom}]}) when is_atom(name) and is_atom(atom) do
line = meta[:line] || 0
quote line: line, do: Clouseau.TemplateEngine.assign_valid?(var!(assigns), unquote(name))
end
def handle_assign(arg) do
arg
end
def assign_valid?(assigns, key) do
case Map.get(assigns, key) do
val when val in ["", nil, false] -> false
_ -> true
end
end
def get_assign(assigns, key) do
Map.get(assigns, key) || ""
end
def handle_expr(buffer, mark, expr) do
expr = Macro.prewalk(expr, &handle_assign/1)
super(buffer, mark, expr)
end
end