Packages
maru
0.12.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/struct/resource.ex
defmodule Maru.Struct.Resource do
@moduledoc false
alias Maru.Struct.Resource
alias Maru.Struct.Plug, as: MaruPlug
defstruct path: [],
parameters: [],
plugs: [],
helpers: [],
version: nil
@doc "make snapshot for current scope."
defmacro snapshot do
quote do
@resource
end
end
@doc "restore current scope by an snapshot."
defmacro restore(value) do
quote do
@resource unquote(value)
end
end
@doc "push path to current scope."
defmacro push_path(value) when is_list(value) do
quote do
%Resource{path: path} = resource = @resource
@resource %{
resource |
path: path ++ unquote(value),
}
end
end
defmacro push_path(value) do
quote do
%Resource{path: path} = resource = @resource
@resource %{
resource |
path: path ++ [unquote(value)],
}
end
end
@doc "push parameter to current scope."
defmacro push_param(value) do
quote do
%Resource{parameters: params} = resource = @resource
parameters =
case unquote(value) do
v when is_list(v) -> params ++ v
v -> params ++ [v]
end
@resource %{ resource | parameters: parameters }
end
end
@doc "push plug to current scope."
defmacro push_plug(value) do
quote do
%Resource{plugs: plugs} = resource = @resource
@resource %{
resource |
plugs: MaruPlug.merge(plugs, unquote(value)),
}
end
end
@doc "get endpoint version of current scope ."
defmacro get_version do
quote do
@resource.version
end
end
@doc "set endpoint version of current scope ."
defmacro set_version(value) do
quote do
@resource %{
@resource |
version: unquote(value)
}
end
end
end