Current section
Files
Jump to
Current section
Files
lib/lenra/views_helper.ex
defmodule Lenra.ViewsHelper do
defmacro defview(args \\ nil, do: block) do
if Module.get_attribute(__CALLER__.module, :dirty),
do:
raise("""
defview is already defined in this module, only one view per module is allowed.
Consider creating a new module or a submodule :
def App.Views.Foo do
use Lenra.View
defview _params do
# Your first view
end
def Bar do
use Lenra.View
defview _params do
# Your second view
# Call this view using App.Views.Foo.Bar.r/0
end
end
end
""")
Module.put_attribute(__CALLER__.module, :dirty, true)
IO.inspect(args)
n_fun =
case args do
{:_, _, nil} ->
quote do
@view true
def n(_) do
n()
end
def n() do
unquote(block)
end
end
_ ->
quote do
@view true
def n(unquote(args)) do
unquote(block)
end
end
end
rest =
quote do
def r(params \\ []) do
%{type: "view", name: Lenra.View.get_id(__MODULE__)}
|> Lenra.Utils.add_all(params, [:coll, :query, :props])
end
def name do
Lenra.View.get_id(__MODULE__)
end
end
[n_fun, rest]
end
end