Packages

Event-driven notification system for Ash Framework with multiple transport types

Current section

Files

Jump to
ash_dispatch lib dsl transformers set_defaults.ex
Raw

lib/dsl/transformers/set_defaults.ex

defmodule AshDispatch.Dsl.Transformers.SetDefaults do
@moduledoc """
Transformer that sets default values for event configuration.
Ensures all events have sensible defaults even if not specified in DSL.
"""
use Spark.Dsl.Transformer
alias Spark.Dsl.Transformer
@impl true
def transform(dsl_state) do
dsl_state =
dsl_state
|> ensure_user_configurable()
|> ensure_notification_type()
|> ensure_action_required()
{:ok, dsl_state}
end
# Ensure user_configurable? has a default
defp ensure_user_configurable(dsl_state) do
case Transformer.get_option(dsl_state, [:dispatch], :user_configurable?) do
nil ->
Transformer.set_option(dsl_state, [:dispatch], :user_configurable?, true)
_ ->
dsl_state
end
end
# Ensure notification_type has a default
defp ensure_notification_type(dsl_state) do
case Transformer.get_option(dsl_state, [:dispatch, :metadata], :notification_type) do
nil ->
Transformer.set_option(dsl_state, [:dispatch, :metadata], :notification_type, :info)
_ ->
dsl_state
end
end
# Ensure action_required? has a default
defp ensure_action_required(dsl_state) do
case Transformer.get_option(dsl_state, [:dispatch, :metadata], :action_required?) do
nil ->
Transformer.set_option(dsl_state, [:dispatch, :metadata], :action_required?, false)
_ ->
dsl_state
end
end
end