Packages
maru
0.3.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/plugs/version.ex
defmodule Maru.Plugs.Version do
alias Plug.Conn
def init(opts) do
opts |> Keyword.pop :using, :path # [:path, :param, :accept_version_header, :header]
end
def call(conn, {:path, _opts}) do
case conn.private do
%{ maru_resource_path: [version | rest],
maru_route_path: route_path
} -> conn
|> Conn.put_private(:maru_resource_path, rest)
|> Conn.put_private(:maru_route_path, [version | route_path])
|> Conn.put_private(:maru_version, version)
_ -> conn
end
end
def call(conn, {:param, opts}) do
case opts |> Keyword.get(:parameter, :apiver) do
nil ->
conn
key ->
version = conn.params[to_string(key)]
conn |> Conn.put_private(:maru_version, version)
end
end
def call(conn, {:accept_version_header, _opts}) do
case Conn.get_req_header(conn, "accept-version") do
[version] -> conn |> Conn.put_private(:maru_version, version)
_ -> conn
end
end
end