Current section
Files
Jump to
Current section
Files
lib/ex_admin/render.ex
alias ExAdmin.Utils
defprotocol ExAdmin.Render do
# @fallback_to_any true
def to_string(data)
end
defimpl ExAdmin.Render, for: Atom do
def to_string(nil), do: ""
def to_string(atom), do: "#{atom}"
end
defimpl ExAdmin.Render, for: BitString do
def to_string(data), do: data
end
defimpl ExAdmin.Render, for: Integer do
def to_string(data), do: Integer.to_string(data)
end
defimpl ExAdmin.Render, for: Float do
def to_string(data), do: Float.to_string(data)
end
defimpl ExAdmin.Render, for: Ecto.Time do
def to_string(dt) do
dt
|> Ecto.Time.to_string
|> String.replace("Z", "")
end
end
defimpl ExAdmin.Render, for: Ecto.DateTime do
def to_string(dt) do
dt
|> Utils.to_datetime
|> :calendar.universal_time_to_local_time
|> Utils.format_datetime
end
end
defimpl ExAdmin.Render, for: Ecto.Date do
def to_string(dt) do
Ecto.Date.to_string dt
end
end
defimpl ExAdmin.Render, for: Decimal do
def to_string(decimal) do
Decimal.to_string decimal
end
end
defimpl ExAdmin.Render, for: Map do
def to_string(map) do
Poison.encode! map
end
end
defimpl ExAdmin.Render, for: List do
def to_string(list) do
if Enum.all?(list, &(is_integer(&1))) do
str = List.to_string(list)
if String.printable? str do
str
else
Poison.encode! list
end
else
Poison.encode! list
end
end
end
defimpl ExAdmin.Render, for: Date do
def to_string(date) do
Date.to_string date
end
end
defimpl ExAdmin.Render, for: Time do
def to_string(time) do
Time.to_string time
end
end
defimpl ExAdmin.Render, for: DateTime do
def to_string(dt) do
dt
|> Utils.to_datetime
|> :calendar.universal_time_to_local_time
|> Utils.format_datetime
end
end
defimpl ExAdmin.Render, for: NaiveDateTime do
def to_string(dt) do
dt
|> NaiveDateTime.to_erl
|> ExAdmin.Utils.format_datetime
end
end
# defimpl ExAdmin.Render, for: Any do
# def to_string(data), do: "#{inspect data}"
# end