Current section
Files
Jump to
Current section
Files
lib/view_helper.ex
defmodule CoreUtils.ViewHelper do
@moduledoc """
Presentation helpers
"""
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
defimpl Poison.Encoder, for: Any do
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__: _} = struct, options) do
enconde_model(struct, options)
end
def encode({lon, lat}, options) when is_float(lon) and is_float(lat) do
%{lon: lon, lat: lat}
|> sanitize_map()
|> Poison.Encoder.Map.encode(options)
end
defp enconde_model(model, options) do
model
|> Map.from_struct()
|> 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
end