Packages
maru
0.10.1
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/helper.ex
defmodule Maru.Helper do
@moduledoc """
Define helper for maru router.
## Shared Params
Defined shared params with Maru.Helper like this:
defmodule SharedParams do
use Maru.Helper
params :period do
optional :start_date
optional :end_date
end
params :pagination do
optional :page, type: Integer
optional :per_page, type: Integer
end
end
And use shared params within Maru.Router like this:
defmodule API do
helpers SharedParams
params do
use [:period, :pagination]
end
get do
...
end
end
## Extended functions or macros
Defined helper like this:
defmodule Authorization do
use Maru.Helper
defmacro current_user do
quote do
assigns[:current_user]
end
end
defmacro current_user! do
quote do
current_user || raise Unauthorized
end
end
end
And use it within Maru.Router like this:
defmodule API do
helpers Authorization
get do
current_user!
...
end
end
"""
@doc false
defmacro __using__(_) do
quote do
import Maru.Builder.DSLs, only: [params: 2]
import unquote(__MODULE__)
Module.register_attribute __MODULE__, :shared_params, accumulate: true
@before_compile unquote(__MODULE__)
end
end
@doc false
defmacro __before_compile__(%Macro.Env{module: module}) do
shared_params = for {name, params} <- Module.get_attribute(module, :shared_params) do
{name, params |> Macro.escape}
end
quote do
def __shared_params__ do
unquote(shared_params)
end
end
end
end