Packages
eview
0.9.4
0.16.0
retired
0.15.0
0.14.0
0.13.0
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
0.11.1
0.11.0
0.10.8
0.10.7
0.10.6
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.0
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.0
0.5.2
0.5.1
0.5.0
0.4.0
0.3.0
0.2.9
0.2.7
0.2.6
0.2.5
0.2.3
0.2.2
0.2.1
0.2.0
0.1.1
0.1.0
Plug that converts response to Nebo #15 API spec format.
Current section
Files
Jump to
Current section
Files
lib/eview/renders/root_render.ex
defmodule EView.Renders.Root do
@moduledoc """
This module converts map to a structure that corresponds
to [Nebo #15 API Manifest](http://docs.apimanifest.apiary.io/) response structure.
"""
alias EView.Renders.{Meta, Error, Data}
@doc """
Render response object or error description following to our guidelines.
This method will look into status code and:
* create `error` property from response data when HTTP status code is `4XX` or `5XX`;
* create `data` property for other HTTP status codes.
"""
def render(error, %{status: status} = conn) when 400 <= status and status < 600 do
%{
meta: Meta.render(error, conn),
error: Error.render(error)
}
end
def render(data, %{assigns: assigns} = conn) do
%{
meta: Meta.render(data, conn),
data: Data.render(data, conn)
}
|> put_paging(assigns)
|> put_urgent(assigns)
|> put_sandbox(assigns)
end
# Add `paging` property. To use it just add `paging` in `render/2` assigns.
defp put_paging(%{meta: %{type: "list"}} = data,
%{paging: %{
limit: limit,
cursors: %{starting_after: _, ending_before: _},
has_more: has_more
} = paging}) when is_integer(limit) and is_boolean(has_more) do
data
|> Map.put(:paging, paging)
end
defp put_paging(data, _assigns), do: data
# Add `urgent` property. To use it just add `urgent` in `render/2` assigns.
defp put_urgent(data, %{urgent: urgent}), do: data |> Map.put(:urgent, urgent)
defp put_urgent(data, _assigns), do: data
# Add `sandbox` property. To use it just add `sandbox` in `render/2` assigns.
defp put_sandbox(data, %{sandbox: sandbox}) do
if Mix.env in [:test, :dev], do: Map.put(data, :sandbox, sandbox), else: data
end
defp put_sandbox(data, _assigns), do: data
end