defmodule Ash.Resource.Transformers.SetRelationshipSource do
@moduledoc "Sets the `source` key on relationships to be the resource they were defined on"
use Spark.Dsl.Transformer
alias Spark.Dsl.Transformer
def transform(dsl_state) do
dsl_state
|> Transformer.get_entities([:relationships])
|> Enum.reduce({:ok, dsl_state}, fn relationship, {:ok, dsl_state} ->
new_relationship = %{relationship | source: Transformer.get_persisted(dsl_state, :module)}
new_dsl_state =
Transformer.replace_entity(
dsl_state,
[:relationships],
new_relationship,
fn replacing ->
replacing.name == relationship.name
end
)
{:ok, new_dsl_state}
end)
end
end