Packages
ash_oban
0.1.1
0.8.10
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0-rc.1
0.8.0-rc.0
0.7.2
0.7.1
0.7.0
0.6.0
0.5.1
0.5.0
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.6
0.2.5
0.2.4
0.2.3
0.2.3-rc.1
0.2.3-rc.0
0.2.2
0.2.1
0.2.0
0.1.14
0.1.13
0.1.12
0.1.11
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
The extension for integrating Ash resources with Oban.
Current section
Files
Jump to
Current section
Files
lib/transformers/set_defaults.ex
defmodule AshOban.Transformers.SetDefaults do
@moduledoc "Set trigger default values"
use Spark.Dsl.Transformer
alias Spark.Dsl.Transformer
def after?(AshOban.Transformers.DefineSchedulers), do: false
def after?(_), do: true
def before?(AshOban.Transformers.DefineSchedulers), do: true
def before?(_), do: false
# sobelow_skip ["DOS.BinToAtom"]
def transform(dsl) do
module = Transformer.get_persisted(dsl, :module)
{:ok,
dsl
|> Transformer.get_entities([:oban, :triggers])
|> Enum.reduce(dsl, fn trigger, dsl ->
read_action =
case trigger.read_action do
nil ->
Ash.Resource.Info.primary_action(dsl, :read) ||
raise Spark.Error.DslError,
path: [
:oban,
:triggers,
trigger.name,
:read_action
],
module: module,
message: """
No read action was configured for this trigger, and no primary read action exists
"""
read_action ->
Ash.Resource.Info.action(dsl, read_action)
end
unless read_action.pagination && read_action.pagination.keyset? do
raise Spark.Error.DslError,
path: [:oban, :triggers, trigger.name, :read_action],
module: module,
message: """
The read action `:#{read_action.name}` must support keyset pagination in order to be
used by an AshOban trigger.
"""
end
queue = trigger.queue || default_queue_name(dsl, trigger)
Transformer.replace_entity(dsl, [:oban, :triggers], %{
trigger
| read_action: read_action.name,
queue: queue,
scheduler_queue: trigger.scheduler_queue || :"#{queue}_scheduler",
action: trigger.action || trigger.name
})
end)}
end
# sobelow_skip ["DOS.BinToAtom"]
defp default_queue_name(dsl, trigger) do
:"#{Ash.Resource.Info.short_name(dsl)}_#{trigger.name}"
end
end