View Source DSL: Ash.Reactor
Ash.Reactor
is a Reactor
extension
which provides steps for working with Ash resources and actions.
See the Ash Reactor Guide for more information.
ash
Ash-related configuration for the Ash.Reactor
extension
Options
Name | Type | Default | Docs |
---|---|---|---|
default_domain | module | A domain to use by default when calling actions |
reactor.action
action name, resource, action \\ nil
Declares a step that will call a generic action on a resource.
Undo behaviour
This step has three different modes of undo.
never
- The result of the action is never undone. This is the default.always
- Theundo_action
will always be called.outside_transaction
- Theundo_action
will not be called when running inside atransaction
block, but will be otherwise.
Nested DSLs
Arguments
Name | Type | Default | Docs |
---|---|---|---|
name | atom | A unique name for the step. | |
resource | module | The resource to call the action on. | |
action | atom | The name of the action to call on the resource. |
Options
Name | Type | Default | Docs |
---|---|---|---|
domain | module | The Domain to use when calling the action. Defaults to the Domain set on the resource or in the ash section. | |
async? | boolean | true | When set to true the step will be executed asynchronously via Reactor's TaskSupervisor . |
authorize? | boolean | nil | Explicitly enable or disable authorization for the action. | |
description | String.t | A description for the step | |
undo_action | atom | The name of the action to call on the resource when the step is to be undone. | |
undo | :always | :never | :outside_transaction | :never | How to handle undoing this action |
reactor.action.actor
actor source
Specifies the action actor
Arguments
Name | Type | Default | Docs |
---|---|---|---|
source | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value | What to use as the source of the actor. |
Options
Name | Type | Default | Docs |
---|---|---|---|
transform | (any -> any) | module | nil | An optional transformation function which can be used to modify the actor before it is passed to the action. |
Introspection
Target: Ash.Reactor.Dsl.Actor
reactor.action.inputs
inputs template
Specify the inputs for an action
Examples
inputs %{
author: result(:get_user),
title: input(:title),
body: input(:body)
}
inputs(author: result(:get_user))
Arguments
Name | Type | Default | Docs |
---|---|---|---|
template | %{optional(atom) => Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value} | keyword(Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value) |
Options
Name | Type | Default | Docs |
---|---|---|---|
transform | (any -> any) | module | nil | An optional transformation function which will transform the inputs before executing the action. |
Introspection
Target: Ash.Reactor.Dsl.Inputs
reactor.action.tenant
tenant source
Specifies the action tenant
Arguments
Name | Type | Default | Docs |
---|---|---|---|
source | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value | What to use as the source of the tenant. |
Options
Name | Type | Default | Docs |
---|---|---|---|
transform | (any -> any) | module | nil | An optional transformation function which can be used to modify the tenant before it is passed to the action. |
Introspection
Target: Ash.Reactor.Dsl.Tenant
reactor.action.wait_for
wait_for names
Wait for the named step to complete before allowing this one to start.
Desugars to argument :_, result(step_to_wait_for)
Examples
wait_for :create_user
Arguments
Name | Type | Default | Docs |
---|---|---|---|
names | atom | list(atom) | The name of the step to wait for. |
Introspection
Target: Reactor.Dsl.WaitFor
Introspection
Target: Ash.Reactor.Dsl.Action
reactor.change
change name, change
Declares a step that will modify a changeset.
Nested DSLs
Arguments
Name | Type | Default | Docs |
---|---|---|---|
name | atom | A unique name for this step. | |
change | (any, any -> any) | module | The module and options for a change. Also accepts a function that takes the changeset and the context. See Ash.Resource.Change.Builtins for builtin changes. |
Options
Name | Type | Default | Docs |
---|---|---|---|
initial | module | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value | The initial value to work from, either a resource or a changeset | |
description | String.t | nil | An optional description for the change | |
only_when_valid? | boolean | false | If the change should only be run on valid changes. By default, all changes are run unless stated otherwise here. |
where | (any -> any) | module | list((any -> any) | module) | [] | Validations that should pass in order for this change to apply. These validations failing will result in this change being ignored. |
fail_if_invalid? | boolean | false | Fail if the result of the change is an invalid changeset |
reactor.change.argument
argument name, source \\ nil
Specifies an argument to a Reactor step.
Each argument is a value which is either the result of another step, or an input value.
Individual arguments can be transformed with an arbitrary function before being passed to any steps.
Examples
argument :name, input(:name)
argument :year, input(:date, [:year])
argument :user, result(:create_user)
argument :user_id, result(:create_user) do
transform & &1.id
end
argument :user_id, result(:create_user, [:id])
argument :three, value(3)
Arguments
Name | Type | Default | Docs |
---|---|---|---|
name | atom | The name of the argument which will be used as the key in the arguments map passed to the implementation. | |
source | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value | What to use as the source of the argument. See Reactor.Dsl.Argument for more information. |
Options
Name | Type | Default | Docs |
---|---|---|---|
transform | (any -> any) | module | nil | An optional transformation function which can be used to modify the argument before it is passed to the step. |
Introspection
Target: Reactor.Dsl.Argument
reactor.change.wait_for
wait_for names
Wait for the named step to complete before allowing this one to start.
Desugars to argument :_, result(step_to_wait_for)
Examples
wait_for :create_user
Arguments
Name | Type | Default | Docs |
---|---|---|---|
names | atom | list(atom) | The name of the step to wait for. |
Introspection
Target: Reactor.Dsl.WaitFor
Introspection
Target: Ash.Reactor.Dsl.Change
reactor.create
create name, resource, action \\ nil
Declares a step that will call a create action on a resource.
Undo behaviour
This step has three different modes of undo.
never
- The result of the action is never undone. This is the default.always
- Theundo_action
will always be called.outside_transaction
- Theundo_action
will not be called when running inside atransaction
block, but will be otherwise.
Nested DSLs
Examples
create :create_post, MyApp.Post, :create do
inputs %{
title: input(:post_title),
author_id: result(:get_user, [:id])
}
actor result(:get_user)
tenant result(:get_organisation, [:id])
end
Arguments
Name | Type | Default | Docs |
---|---|---|---|
name | atom | A unique name for the step. | |
resource | module | The resource to call the action on. | |
action | atom | The name of the action to call on the resource. |
Options
Name | Type | Default | Docs |
---|---|---|---|
initial | nil | module | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value | The initial value passed into the action. | |
upsert_identity | atom | The identity to use for the upsert | |
upsert? | boolean | false | Whether or not this action should be executed as an upsert. |
domain | module | The Domain to use when calling the action. Defaults to the Domain set on the resource or in the ash section. | |
async? | boolean | true | When set to true the step will be executed asynchronously via Reactor's TaskSupervisor . |
authorize? | boolean | nil | Explicitly enable or disable authorization for the action. | |
description | String.t | A description for the step | |
undo_action | atom | The name of the action to call on the resource when the step is to be undone. | |
undo | :always | :never | :outside_transaction | :never | How to handle undoing this action |
reactor.create.actor
actor source
Specifies the action actor
Arguments
Name | Type | Default | Docs |
---|---|---|---|
source | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value | What to use as the source of the actor. |
Options
Name | Type | Default | Docs |
---|---|---|---|
transform | (any -> any) | module | nil | An optional transformation function which can be used to modify the actor before it is passed to the action. |
Introspection
Target: Ash.Reactor.Dsl.Actor
reactor.create.inputs
inputs template
Specify the inputs for an action
Examples
inputs %{
author: result(:get_user),
title: input(:title),
body: input(:body)
}
inputs(author: result(:get_user))
Arguments
Name | Type | Default | Docs |
---|---|---|---|
template | %{optional(atom) => Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value} | keyword(Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value) |
Options
Name | Type | Default | Docs |
---|---|---|---|
transform | (any -> any) | module | nil | An optional transformation function which will transform the inputs before executing the action. |
Introspection
Target: Ash.Reactor.Dsl.Inputs
reactor.create.tenant
tenant source
Specifies the action tenant
Arguments
Name | Type | Default | Docs |
---|---|---|---|
source | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value | What to use as the source of the tenant. |
Options
Name | Type | Default | Docs |
---|---|---|---|
transform | (any -> any) | module | nil | An optional transformation function which can be used to modify the tenant before it is passed to the action. |
Introspection
Target: Ash.Reactor.Dsl.Tenant
reactor.create.wait_for
wait_for names
Wait for the named step to complete before allowing this one to start.
Desugars to argument :_, result(step_to_wait_for)
Examples
wait_for :create_user
Arguments
Name | Type | Default | Docs |
---|---|---|---|
names | atom | list(atom) | The name of the step to wait for. |
Introspection
Target: Reactor.Dsl.WaitFor
Introspection
Target: Ash.Reactor.Dsl.Create
reactor.destroy
destroy name, resource, action \\ nil
Declares a step that will call a destroy action on a resource.
Undo behaviour
This step has three different modes of undo.
never
- The result of the action is never undone. This is the default.always
- Theundo_action
will always be called.outside_transaction
- Theundo_action
will not be called when running inside atransaction
block, but will be otherwise.
Nested DSLs
Examples
destroy :delete_post, MyApp.Post, :destroy do
initial input(:post)
actor result(:get_user)
tenant result(:get_organisation, [:id])
end
Arguments
Name | Type | Default | Docs |
---|---|---|---|
name | atom | A unique name for the step. | |
resource | module | The resource to call the action on. | |
action | atom | The name of the action to call on the resource. |
Options
Name | Type | Default | Docs |
---|---|---|---|
initial | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value | The record to update. | |
return_destroyed? | boolean | false | Whether or not the step should return the destroyed record upon completion. |
domain | module | The Domain to use when calling the action. Defaults to the Domain set on the resource or in the ash section. | |
async? | boolean | true | When set to true the step will be executed asynchronously via Reactor's TaskSupervisor . |
authorize? | boolean | nil | Explicitly enable or disable authorization for the action. | |
description | String.t | A description for the step | |
undo_action | atom | The name of the action to call on the resource when the step is to be undone. | |
undo | :always | :never | :outside_transaction | :never | How to handle undoing this action |
reactor.destroy.actor
actor source
Specifies the action actor
Arguments
Name | Type | Default | Docs |
---|---|---|---|
source | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value | What to use as the source of the actor. |
Options
Name | Type | Default | Docs |
---|---|---|---|
transform | (any -> any) | module | nil | An optional transformation function which can be used to modify the actor before it is passed to the action. |
Introspection
Target: Ash.Reactor.Dsl.Actor
reactor.destroy.inputs
inputs template
Specify the inputs for an action
Examples
inputs %{
author: result(:get_user),
title: input(:title),
body: input(:body)
}
inputs(author: result(:get_user))
Arguments
Name | Type | Default | Docs |
---|---|---|---|
template | %{optional(atom) => Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value} | keyword(Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value) |
Options
Name | Type | Default | Docs |
---|---|---|---|
transform | (any -> any) | module | nil | An optional transformation function which will transform the inputs before executing the action. |
Introspection
Target: Ash.Reactor.Dsl.Inputs
reactor.destroy.tenant
tenant source
Specifies the action tenant
Arguments
Name | Type | Default | Docs |
---|---|---|---|
source | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value | What to use as the source of the tenant. |
Options
Name | Type | Default | Docs |
---|---|---|---|
transform | (any -> any) | module | nil | An optional transformation function which can be used to modify the tenant before it is passed to the action. |
Introspection
Target: Ash.Reactor.Dsl.Tenant
reactor.destroy.wait_for
wait_for names
Wait for the named step to complete before allowing this one to start.
Desugars to argument :_, result(step_to_wait_for)
Examples
wait_for :create_user
Arguments
Name | Type | Default | Docs |
---|---|---|---|
names | atom | list(atom) | The name of the step to wait for. |
Introspection
Target: Reactor.Dsl.WaitFor
Introspection
Target: Ash.Reactor.Dsl.Destroy
reactor.read_one
read_one name, resource, action \\ nil
Declares a step that will call a read action on a resource returning a single record.
Nested DSLs
Examples
read_one :post_by_id, MyApp.Post, :read do
inputs %{id: input(:post_id)}
end
Arguments
Name | Type | Default | Docs |
---|---|---|---|
name | atom | A unique name for the step. | |
resource | module | The resource to call the action on. | |
action | atom | The name of the action to call on the resource. |
Options
Name | Type | Default | Docs |
---|---|---|---|
fail_on_not_found? | boolean | false | When set to true the step will fail if the resource is not found. |
domain | module | The Domain to use when calling the action. Defaults to the Domain set on the resource or in the ash section. | |
async? | boolean | true | When set to true the step will be executed asynchronously via Reactor's TaskSupervisor . |
authorize? | boolean | nil | Explicitly enable or disable authorization for the action. | |
description | String.t | A description for the step |
reactor.read_one.actor
actor source
Specifies the action actor
Arguments
Name | Type | Default | Docs |
---|---|---|---|
source | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value | What to use as the source of the actor. |
Options
Name | Type | Default | Docs |
---|---|---|---|
transform | (any -> any) | module | nil | An optional transformation function which can be used to modify the actor before it is passed to the action. |
Introspection
Target: Ash.Reactor.Dsl.Actor
reactor.read_one.inputs
inputs template
Specify the inputs for an action
Examples
inputs %{
author: result(:get_user),
title: input(:title),
body: input(:body)
}
inputs(author: result(:get_user))
Arguments
Name | Type | Default | Docs |
---|---|---|---|
template | %{optional(atom) => Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value} | keyword(Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value) |
Options
Name | Type | Default | Docs |
---|---|---|---|
transform | (any -> any) | module | nil | An optional transformation function which will transform the inputs before executing the action. |
Introspection
Target: Ash.Reactor.Dsl.Inputs
reactor.read_one.tenant
tenant source
Specifies the action tenant
Arguments
Name | Type | Default | Docs |
---|---|---|---|
source | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value | What to use as the source of the tenant. |
Options
Name | Type | Default | Docs |
---|---|---|---|
transform | (any -> any) | module | nil | An optional transformation function which can be used to modify the tenant before it is passed to the action. |
Introspection
Target: Ash.Reactor.Dsl.Tenant
reactor.read_one.wait_for
wait_for names
Wait for the named step to complete before allowing this one to start.
Desugars to argument :_, result(step_to_wait_for)
Examples
wait_for :create_user
Arguments
Name | Type | Default | Docs |
---|---|---|---|
names | atom | list(atom) | The name of the step to wait for. |
Introspection
Target: Reactor.Dsl.WaitFor
Introspection
Target: Ash.Reactor.Dsl.ReadOne
reactor.read
read name, resource, action \\ nil
Declares a step that will call a read action on a resource.
Nested DSLs
Examples
read :read_posts, MyApp.Post, :read
read :read_posts_in_range, MyApp.Post, :read_in_range do
inputs %{min_date: input(:min_date), max_date: input(:max_date)}
end
Arguments
Name | Type | Default | Docs |
---|---|---|---|
name | atom | A unique name for the step. | |
resource | module | The resource to call the action on. | |
action | atom | The name of the action to call on the resource. |
Options
Name | Type | Default | Docs |
---|---|---|---|
domain | module | The Domain to use when calling the action. Defaults to the Domain set on the resource or in the ash section. | |
async? | boolean | true | When set to true the step will be executed asynchronously via Reactor's TaskSupervisor . |
authorize? | boolean | nil | Explicitly enable or disable authorization for the action. | |
description | String.t | A description for the step |
reactor.read.actor
actor source
Specifies the action actor
Arguments
Name | Type | Default | Docs |
---|---|---|---|
source | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value | What to use as the source of the actor. |
Options
Name | Type | Default | Docs |
---|---|---|---|
transform | (any -> any) | module | nil | An optional transformation function which can be used to modify the actor before it is passed to the action. |
Introspection
Target: Ash.Reactor.Dsl.Actor
reactor.read.inputs
inputs template
Specify the inputs for an action
Examples
inputs %{
author: result(:get_user),
title: input(:title),
body: input(:body)
}
inputs(author: result(:get_user))
Arguments
Name | Type | Default | Docs |
---|---|---|---|
template | %{optional(atom) => Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value} | keyword(Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value) |
Options
Name | Type | Default | Docs |
---|---|---|---|
transform | (any -> any) | module | nil | An optional transformation function which will transform the inputs before executing the action. |
Introspection
Target: Ash.Reactor.Dsl.Inputs
reactor.read.tenant
tenant source
Specifies the action tenant
Arguments
Name | Type | Default | Docs |
---|---|---|---|
source | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value | What to use as the source of the tenant. |
Options
Name | Type | Default | Docs |
---|---|---|---|
transform | (any -> any) | module | nil | An optional transformation function which can be used to modify the tenant before it is passed to the action. |
Introspection
Target: Ash.Reactor.Dsl.Tenant
reactor.read.wait_for
wait_for names
Wait for the named step to complete before allowing this one to start.
Desugars to argument :_, result(step_to_wait_for)
Examples
wait_for :create_user
Arguments
Name | Type | Default | Docs |
---|---|---|---|
names | atom | list(atom) | The name of the step to wait for. |
Introspection
Target: Reactor.Dsl.WaitFor
Introspection
Target: Ash.Reactor.Dsl.Read
reactor.transaction
transaction name, resources
Creates a group of steps which will be executed inside a data layer transaction.
Nested DSLs
Arguments
Name | Type | Default | Docs |
---|---|---|---|
name | atom | A unique name for the step. | |
resources | module | list(module) | A resource or list of resources to consider in the transaction. |
Options
Name | Type | Default | Docs |
---|---|---|---|
return | atom | The name of the step whose result will be returned as the return value of the transaction. | |
timeout | pos_integer | :infinity | 15000 | How long to allow the transaction to run before timing out. |
reactor.transaction.wait_for
wait_for names
Wait for the named step to complete before allowing this one to start.
Desugars to argument :_, result(step_to_wait_for)
Examples
wait_for :create_user
Arguments
Name | Type | Default | Docs |
---|---|---|---|
names | atom | list(atom) | The name of the step to wait for. |
Introspection
Target: Reactor.Dsl.WaitFor
Introspection
Target: Ash.Reactor.Dsl.Transaction
reactor.update
update name, resource, action \\ nil
Declares a step that will call an update action on a resource.
Undo behaviour
This step has three different modes of undo.
never
- The result of the action is never undone. This is the default.always
- Theundo_action
will always be called.outside_transaction
- Theundo_action
will not be called when running inside atransaction
block, but will be otherwise.
Nested DSLs
Examples
update :publish_post, MyApp.Post, :update do
initial input(:post)
inputs %{
published: value(true)
}
actor result(:get_user)
tenant result(:get_organisation, [:id])
end
Arguments
Name | Type | Default | Docs |
---|---|---|---|
name | atom | A unique name for the step. | |
resource | module | The resource to call the action on. | |
action | atom | The name of the action to call on the resource. |
Options
Name | Type | Default | Docs |
---|---|---|---|
initial | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value | The record to update. | |
domain | module | The Domain to use when calling the action. Defaults to the Domain set on the resource or in the ash section. | |
async? | boolean | true | When set to true the step will be executed asynchronously via Reactor's TaskSupervisor . |
authorize? | boolean | nil | Explicitly enable or disable authorization for the action. | |
description | String.t | A description for the step | |
undo_action | atom | The name of the action to call on the resource when the step is to be undone. | |
undo | :always | :never | :outside_transaction | :never | How to handle undoing this action |
reactor.update.actor
actor source
Specifies the action actor
Arguments
Name | Type | Default | Docs |
---|---|---|---|
source | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value | What to use as the source of the actor. |
Options
Name | Type | Default | Docs |
---|---|---|---|
transform | (any -> any) | module | nil | An optional transformation function which can be used to modify the actor before it is passed to the action. |
Introspection
Target: Ash.Reactor.Dsl.Actor
reactor.update.inputs
inputs template
Specify the inputs for an action
Examples
inputs %{
author: result(:get_user),
title: input(:title),
body: input(:body)
}
inputs(author: result(:get_user))
Arguments
Name | Type | Default | Docs |
---|---|---|---|
template | %{optional(atom) => Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value} | keyword(Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value) |
Options
Name | Type | Default | Docs |
---|---|---|---|
transform | (any -> any) | module | nil | An optional transformation function which will transform the inputs before executing the action. |
Introspection
Target: Ash.Reactor.Dsl.Inputs
reactor.update.tenant
tenant source
Specifies the action tenant
Arguments
Name | Type | Default | Docs |
---|---|---|---|
source | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value | What to use as the source of the tenant. |
Options
Name | Type | Default | Docs |
---|---|---|---|
transform | (any -> any) | module | nil | An optional transformation function which can be used to modify the tenant before it is passed to the action. |
Introspection
Target: Ash.Reactor.Dsl.Tenant
reactor.update.wait_for
wait_for names
Wait for the named step to complete before allowing this one to start.
Desugars to argument :_, result(step_to_wait_for)
Examples
wait_for :create_user
Arguments
Name | Type | Default | Docs |
---|---|---|---|
names | atom | list(atom) | The name of the step to wait for. |
Introspection
Target: Reactor.Dsl.WaitFor
Introspection
Target: Ash.Reactor.Dsl.Update