Packages
maru
0.9.3
0.14.0-pre.1
0.13.2
0.13.1
0.13.0
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.6
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.0
0.5.1
0.5.0
0.4.1
0.4.0
0.3.1
0.3.0
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
REST-like API micro-framework for elixir inspired by grape.
Current section
Files
Jump to
Current section
Files
lib/maru/builder/namespaces.ex
defmodule Maru.Builder.Namespaces do
@moduledoc """
Namespace DSLs for parsing router.
"""
alias Maru.Router.Resource
alias Maru.Router.Path, as: MaruPath
@namespaces [:namespace, :group, :resource, :resources, :segment]
for namespace <- @namespaces do
@doc "Namespace alias #{namespace}."
defmacro unquote(namespace)([do: block]), do: block
defmacro unquote(namespace)(path, [do: block]) do
path = path |> MaruPath.split
quote do
%Resource{path: path} = resource = @resource
@resource %{resource | path: path ++ unquote(path)}
unquote(block)
@resource resource
end
end
end
@doc "Special namespace which save path to param list."
defmacro route_param(param, [do: block]) do
quote do
%Resource{path: path, param_context: param_context} = resource = @resource
@resource %{ resource |
path: path ++ [unquote(param)],
param_context: param_context ++ @param_context
}
@param_context []
unquote(block)
@resource resource
end
end
end