Packages
A serialization library implementing the jsonapi.org 1.0 spec suitable for use building JSON APIs in Phoenix and any other Plug based framework or app.
Current section
Files
Jump to
Current section
Files
lib/ja_serializer/builder/attribute.ex
defmodule JaSerializer.Builder.Attribute do
@moduledoc false
alias JaSerializer.Builder.Utils
defstruct [:key, :value]
def build(context) do
context
|> attributes
|> filter_fields(context)
|> Enum.map(&do_build/1)
end
defp attributes(%{serializer: serializer, data: data, conn: conn}) do
serializer.attributes(data, conn)
end
defp filter_fields(attrs, context = %{serializer: serializer, opts: opts}) do
case opts[:fields] do
fields when is_map(fields) ->
do_filter(attrs, fields[serializer.type(context.data, context.conn)])
_any ->
attrs
end
end
defp filter_fields(attrs, _), do: attrs
defp do_filter(attrs, nil), do: attrs
defp do_filter(attrs, fields) when is_list(fields),
do: Map.take(attrs, fields)
defp do_filter(attrs, fields) when is_binary(fields),
do: do_filter(attrs, Utils.safe_atom_list(fields))
defp do_build({key, value}), do: %__MODULE__{key: key, value: value}
end