ash_postgres/lib/transformers/validate_references.ex

24 lines
771 B
Elixir
Raw Normal View History

defmodule AshPostgres.Transformers.ValidateReferences do
@moduledoc "Ensures that all `references` on a resource refer to a real relationship"
use Spark.Dsl.Transformer
alias Spark.Dsl.Transformer
def after_compile?, do: true
def transform(dsl) do
dsl
|> AshPostgres.DataLayer.Info.references()
|> Enum.each(fn reference ->
unless Ash.Resource.Info.relationship(dsl, reference.relationship) do
raise Spark.Error.DslError,
path: [:postgres, :references, reference.relationship],
module: Transformer.get_persisted(dsl, :module),
message:
"Found reference configuration for relationship `#{reference.relationship}`, but no such relationship exists"
end
end)
{:ok, dsl}
end
end