ash_state_machine/lib/verifiers/verify_transition_actions.ex

27 lines
861 B
Elixir
Raw Normal View History

defmodule AshStateMachine.Verifiers.VerifyTransitionActions do
@moduledoc "Verifies that each transition corresponds to an update action"
2023-04-22 07:25:39 +12:00
use Spark.Dsl.Verifier
def verify(dsl_state) do
dsl_state
|> AshStateMachine.Info.state_machine_transitions()
|> Enum.reject(fn transition ->
transition.action == :*
end)
|> Enum.each(fn transition ->
action = Ash.Resource.Info.action(dsl_state, transition.action)
2023-04-22 07:25:39 +12:00
unless action && action.type == :update do
raise Spark.Error.DslError,
module: Spark.Dsl.Verifier.get_persisted(dsl_state, :module),
path: [:state_machine, :transitions, :transition, transition.action],
2023-04-22 07:25:39 +12:00
message: """
Transition configured with action `:#{transition.action}` but no such update action is defined.
2023-04-22 07:25:39 +12:00
"""
end
end)
:ok
end
end