Packages
maru
0.11.3
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/path.ex
defmodule Maru.Builder.Path do
@moduledoc false
@doc false
def split(path) when is_atom(path), do: [path |> to_string]
def split(path) when is_binary(path) do
func = fn
("", r) -> r
(":" <> param, r) -> [param |> String.to_atom | r]
(p, r) -> [p | r]
end
path |> String.split("/") |> Enum.reduce([], func) |> Enum.reverse
end
def split(_path), do: raise "path should be Atom or String"
@doc false
def parse_params(conn_path_info, route_path) do
do_parse_params(conn_path_info, route_path , %{})
end
defp do_parse_params([], [], result), do: result
defp do_parse_params([h|t1], [h|t2], result) do
do_parse_params(t1, t2, result)
end
defp do_parse_params([h1|t1], [h2|t2], result) when is_atom(h2) do
do_parse_params(t1, t2, put_in(result, [to_string(h2)], h1))
end
end