Current section

Files

Jump to
core_utils lib view_helper.ex
Raw

lib/view_helper.ex

defmodule CoreUtils.ViewHelper do
@moduledoc """
Presentation helpers
"""
alias CoreUtils.StructUtil
def translate_errors(%{causes: causes}) do
%{status: :error, code: 1, message: "Validation errors", causes: causes}
end
def translate_errors(changeset) do
%{
status: :error,
code: 1,
message: "Validation errors",
causes: Ecto.Changeset.traverse_errors(changeset, &:erlang.element(1, &1))
}
end
defimpl Poison.Encoder, for: Tuple do
def encode(tuple, _options) do
tuple
|> Tuple.to_list()
|> Poison.encode!()
end
end
def encode(%{__struct__: Core.Models.Task} = struct, options \\ []) do
struct =
if struct.geom do
{lon, lat} = struct.geom.coordinates
%{struct | lon: lon, lat: lat}
else
struct
end
enconde_model(struct, options)
end
def encode(struct, options) do
enconde_model(struct, options)
end
defp enconde_model(model, options) do
model
|> StructUtil.nested_parse()
|> sanitize_map()
|> Poison.Encoder.Map.encode(options)
end
defp sanitize_map(map) do
map
|> Enum.filter(fn
{_, %Ecto.Association.NotLoaded{}} -> false
{:__meta__, _} -> false
{:__struct__, _} -> false
{_, _} -> true
end)
|> Map.new()
end
end