Packages
maru
0.10.2
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/route.ex
defmodule Maru.Struct.Route do
@moduledoc false
alias Maru.Struct.Plug, as: MaruPlug
defstruct method: nil,
path: [],
version: nil,
desc: nil,
parameters: [],
helpers: [],
plugs: [],
module: nil,
func_id: nil
@doc "push an endpoint to current scope."
defmacro push(%__MODULE__{}=value) do
quote do
@routes @routes ++ [unquote(value)]
end
end
@doc "merge mounted routes to current scope."
def merge(resource, plugs, %__MODULE__{}=route) do
if not is_nil(resource.version) and not is_nil(route.version) do
raise "can't mount a versional router to another versional router"
end
versioning_path = is_nil(resource.version) && [] || [{:version}]
%{ route |
version: route.version || resource.version,
path: versioning_path ++ resource.path ++ route.path,
parameters: resource.parameters ++ route.parameters,
plugs: resource.plugs |> MaruPlug.merge(plugs) |> MaruPlug.merge(route.plugs),
}
end
end