Packages
eview
0.2.6
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/data_render.ex
defmodule EView.DataRender do
@moduledoc """
This module renders `data` property from response structure.
"""
@doc """
Render new `data` property for API response.
For objects it will assign `data.type` property based on module name that defines your view.
You can put `type` property to your response body to override this behavior.
"""
def render(data, _conn) when is_list(data), do: data
def render(%{type: _} = data, _conn), do: data
def render(data, conn) when is_map(data) do
data
|> add_object_name(conn)
end
defp add_object_name(data, %{private: %{phoenix_view: view_module}}) do
data
|> Map.put_new(:type, extract_object_name(view_module))
end
defp extract_object_name(view_module) do
view_module
|> to_string
|> String.split(".")
|> List.last
|> Macro.underscore
|> String.split("_")
|> Enum.filter(fn module_part ->
not module_part in ["view"]
end)
|> Enum.join("_")
end
end