with {_, {:ok, cast_data_sym}} <-
{:casting_data,
data |> LikeValidator.cast_data() |> Ecto.Changeset.apply_action(:insert)},
- {_, cast_data} <-
- {:stringify_keys, ObjectValidator.stringify_keys(cast_data_sym |> Map.from_struct())},
+ cast_data = ObjectValidator.stringify_keys(Map.from_struct(cast_data_sym)),
:ok <- ObjectValidator.fetch_actor_and_object(cast_data),
{_, {:ok, cast_data}} <- {:maybe_add_context, maybe_add_context_from_object(cast_data)},
{_, {:ok, cast_data}} <-
do: {:ok, data}
defp maybe_add_context_from_object(%{"object" => object} = data) when is_binary(object) do
- if object = Object.normalize(object) do
- data =
- data
- |> Map.put("context", object.data["context"])
-
- {:ok, data}
+ with %{data: %{"context" => context}} when is_binary(context) <- Object.normalize(object) do
+ {:ok, Map.put(data, "context", context)}
else
- {:error, "No context on referenced object"}
+ _ ->
+ {:error, :no_context}
end
end
defp maybe_add_context_from_object(_) do
- {:error, "No referenced object"}
+ {:error, :no_context}
end
- defp maybe_add_recipients_from_object(%{"object" => object} = data) do
- to = data["to"] || []
- cc = data["cc"] || []
+ defp maybe_add_recipients_from_object(%{"to" => [_ | _], "cc" => [_ | _]} = data),
+ do: {:ok, data}
- if to == [] && cc == [] do
- if object = Object.normalize(object) do
+ defp maybe_add_recipients_from_object(%{"object" => object} = data) do
+ case Object.normalize(object) do
+ %{data: %{"actor" => actor}} ->
data =
data
- |> Map.put("to", [object.data["actor"]])
- |> Map.put("cc", cc)
+ |> Map.put("to", [actor])
+ |> Map.put("cc", data["cc"] || [])
{:ok, data}
- else
- {:error, "No actor on referenced object"}
- end
- else
- {:ok, data}
+
+ nil ->
+ {:error, :no_object}
+
+ _ ->
+ {:error, :no_actor}
end
end
defp maybe_add_recipients_from_object(_) do
- {:error, "No referenced object"}
+ {:error, :no_object}
end
end