Packages

CouchDB client, wrapping couchbeam erlang client.

Current section

Files

Jump to
couchex lib mapper.ex
Raw

lib/mapper.ex

defmodule Mapper do
def list_to_map([]), do: []
def list_to_map({:error, err_msg}), do: {:error, err_msg}
def list_to_map([ { hd } | tail] = list) when is_list(hd) do
list |> Enum.map(&list_to_map(&1))
end
def list_to_map({list}) when is_list(list) do
list_to_map(list)
end
def list_to_map([ hd | tail] = tuple_list) when is_tuple(hd) do
tuple_list |> Enum.reduce(%{}, fn(pair, acc)-> tuple_to_map(pair, acc) end)
end
defp tuple_to_map({list}, map) when is_list(list),do: list_to_map(list)
defp tuple_to_map({k,v}, map) when is_tuple(v), do: map |> Map.put(k, tuple_to_map(v, %{}))
defp tuple_to_map({k,v}, map), do: map |> Map.put(k, parse_value(v))
defp parse_value(v) when is_list(v), do: v |> Enum.map(fn(val)-> parse_value(val) end)
defp parse_value(v) when is_tuple(v), do: tuple_to_map(v, %{})
defp parse_value(v), do: v
def map_to_list({k,v}), do: [{k, v}]
def map_to_list(map) when is_map(map), do: reduce(map)
def map_to_list(list) when is_list(list), do: list |> Enum.map(fn(v)-> map_to_list(v) end)
def map_to_list(v) when is_atom(v), do: v
def map_to_list(v) when is_binary(v), do: v
def map_to_list(v) when is_number(v), do: v
def map_to_list(v) when is_boolean(v), do: v
def map_to_list([]), do: []
def reduce(map) do
map |> Enum.reduce([], fn({k,v}, acc) -> [{k, map_to_list(v)}] ++ acc end)
end
end