Packages
maru
0.9.0
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/methods.ex
defmodule Maru.Builder.Methods do
@moduledoc """
Method DSLs for parsing router.
"""
alias Maru.Router.Endpoint
alias Maru.Router.Path, as: MaruPath
@methods [:get, :post, :put, :patch, :delete, :head, :options]
for method <- @methods do
@doc "Handle #{method} method."
defmacro unquote(method)(path \\ "", [do: block]) do
%{ method: unquote(method) |> to_string |> String.upcase,
path: path |> MaruPath.split,
block: block |> Macro.escape,
} |> endpoint
end
end
@doc "Handle all method."
defmacro match(path \\ "", [do: block]) do
%{ method: Macro.var(:_, nil) |> Macro.escape,
path: path |> MaruPath.split,
block: block |> Macro.escape,
} |> endpoint
end
defp endpoint(ep) do
quote do
@endpoints %Endpoint{
desc: @desc,
method: unquote(ep.method),
version: @version,
path: @resource.path ++ unquote(ep.path),
param_context: @resource.param_context ++ @param_context,
block: unquote(ep.block),
}
@param_context []
@desc nil
end
end
end