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

NameTypeDefaultDocs
default_domainmoduleA 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.

Nested DSLs

Arguments

NameTypeDefaultDocs
nameatomA unique name for the step. This is used when choosing the return value of the Reactor and for arguments into other steps.
resourcemoduleThe resource to call the action on.
actionatomThe name of the action to call on the resource.

Options

NameTypeDefaultDocs
domainmoduleThe Domain to use when calling the action. Defaults to the Domain set on the resource or in the ash section.
async?booleantrueWhen set to true the step will be executed asynchronously via Reactor's TaskSupervisor.
authorize?boolean | nilExplicitly enable or disable authorization for the action.
descriptionString.tA description for the step
undo_actionatomThe name of the action to call on the resource when the step is to be undone.
undo:always | :never | :outside_transaction:neverWhat to do when the reactor is undoing it's work? always - The undo action will always be run. never - The action will never be undone. * outside_transaction - The action will only be undone if not running inside a transaction.

reactor.action.actor

actor source

Specifies the action actor

Arguments

NameTypeDefaultDocs
sourceReactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueWhat to use as the source of the actor. See Reactor.Dsl.Argument for more information.

Options

NameTypeDefaultDocs
transform(any -> any) | module | nilAn 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

NameTypeDefaultDocs
template%{optional(atom) => Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value} | keyword(Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value)

Options

NameTypeDefaultDocs
transform(any -> any) | module | nilAn 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

NameTypeDefaultDocs
sourceReactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueWhat to use as the source of the tenant. See Reactor.Dsl.Argument for more information.

Options

NameTypeDefaultDocs
transform(any -> any) | module | nilAn 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

NameTypeDefaultDocs
namesatom | list(atom)The name of the step to wait for.

Introspection

Target: Reactor.Dsl.WaitFor

Introspection

Target: Ash.Reactor.Dsl.Action

reactor.create

create name, resource, action \\ nil

Declares a step that will call a create action on a resource.

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

NameTypeDefaultDocs
nameatomA unique name for the step. This is used when choosing the return value of the Reactor and for arguments into other steps.
resourcemoduleThe resource to call the action on.
actionatomThe name of the action to call on the resource.

Options

NameTypeDefaultDocs
upsert_identityatomThe identity to use for the upsert
upsert?booleanfalseWhether or not this action should be executed as an upsert.
domainmoduleThe Domain to use when calling the action. Defaults to the Domain set on the resource or in the ash section.
async?booleantrueWhen set to true the step will be executed asynchronously via Reactor's TaskSupervisor.
authorize?boolean | nilExplicitly enable or disable authorization for the action.
descriptionString.tA description for the step
undo_actionatomThe name of the action to call on the resource when the step is to be undone.
undo:always | :never | :outside_transaction:neverWhat to do when the reactor is undoing it's work? always - The undo action will always be run. never - The action will never be undone. * outside_transaction - The action will only be undone if not running inside a transaction.

reactor.create.actor

actor source

Specifies the action actor

Arguments

NameTypeDefaultDocs
sourceReactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueWhat to use as the source of the actor. See Reactor.Dsl.Argument for more information.

Options

NameTypeDefaultDocs
transform(any -> any) | module | nilAn 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

NameTypeDefaultDocs
template%{optional(atom) => Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value} | keyword(Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value)

Options

NameTypeDefaultDocs
transform(any -> any) | module | nilAn 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

NameTypeDefaultDocs
sourceReactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueWhat to use as the source of the tenant. See Reactor.Dsl.Argument for more information.

Options

NameTypeDefaultDocs
transform(any -> any) | module | nilAn 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

NameTypeDefaultDocs
namesatom | 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.

Nested DSLs

Examples

destroy :delete_post, MyApp.Post, :destroy do
  initial input(:post)
  actor result(:get_user)
  tenant result(:get_organisation, [:id])
end

Arguments

NameTypeDefaultDocs
nameatomA unique name for the step. This is used when choosing the return value of the Reactor and for arguments into other steps.
resourcemoduleThe resource to call the action on.
actionatomThe name of the action to call on the resource.

Options

NameTypeDefaultDocs
initialReactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe record to update.
return_destroyed?booleanfalseWhether or not the step should return the destroyed record upon completion.
domainmoduleThe Domain to use when calling the action. Defaults to the Domain set on the resource or in the ash section.
async?booleantrueWhen set to true the step will be executed asynchronously via Reactor's TaskSupervisor.
authorize?boolean | nilExplicitly enable or disable authorization for the action.
descriptionString.tA description for the step
undo_actionatomThe name of the action to call on the resource when the step is to be undone.
undo:always | :never | :outside_transaction:neverWhat to do when the reactor is undoing it's work? always - The undo action will always be run. never - The action will never be undone. * outside_transaction - The action will only be undone if not running inside a transaction.

reactor.destroy.actor

actor source

Specifies the action actor

Arguments

NameTypeDefaultDocs
sourceReactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueWhat to use as the source of the actor. See Reactor.Dsl.Argument for more information.

Options

NameTypeDefaultDocs
transform(any -> any) | module | nilAn 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

NameTypeDefaultDocs
template%{optional(atom) => Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value} | keyword(Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value)

Options

NameTypeDefaultDocs
transform(any -> any) | module | nilAn 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

NameTypeDefaultDocs
sourceReactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueWhat to use as the source of the tenant. See Reactor.Dsl.Argument for more information.

Options

NameTypeDefaultDocs
transform(any -> any) | module | nilAn 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

NameTypeDefaultDocs
namesatom | 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

NameTypeDefaultDocs
nameatomA unique name for the step. This is used when choosing the return value of the Reactor and for arguments into other steps.
resourcemoduleThe resource to call the action on.
actionatomThe name of the action to call on the resource.

Options

NameTypeDefaultDocs
fail_on_not_found?booleanfalseWhen set to true the step will fail if the resource is not found.
domainmoduleThe Domain to use when calling the action. Defaults to the Domain set on the resource or in the ash section.
async?booleantrueWhen set to true the step will be executed asynchronously via Reactor's TaskSupervisor.
authorize?boolean | nilExplicitly enable or disable authorization for the action.
descriptionString.tA description for the step

reactor.read_one.actor

actor source

Specifies the action actor

Arguments

NameTypeDefaultDocs
sourceReactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueWhat to use as the source of the actor. See Reactor.Dsl.Argument for more information.

Options

NameTypeDefaultDocs
transform(any -> any) | module | nilAn 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

NameTypeDefaultDocs
template%{optional(atom) => Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value} | keyword(Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value)

Options

NameTypeDefaultDocs
transform(any -> any) | module | nilAn 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

NameTypeDefaultDocs
sourceReactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueWhat to use as the source of the tenant. See Reactor.Dsl.Argument for more information.

Options

NameTypeDefaultDocs
transform(any -> any) | module | nilAn 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

NameTypeDefaultDocs
namesatom | 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

NameTypeDefaultDocs
nameatomA unique name for the step. This is used when choosing the return value of the Reactor and for arguments into other steps.
resourcemoduleThe resource to call the action on.
actionatomThe name of the action to call on the resource.

Options

NameTypeDefaultDocs
domainmoduleThe Domain to use when calling the action. Defaults to the Domain set on the resource or in the ash section.
async?booleantrueWhen set to true the step will be executed asynchronously via Reactor's TaskSupervisor.
authorize?boolean | nilExplicitly enable or disable authorization for the action.
descriptionString.tA description for the step

reactor.read.actor

actor source

Specifies the action actor

Arguments

NameTypeDefaultDocs
sourceReactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueWhat to use as the source of the actor. See Reactor.Dsl.Argument for more information.

Options

NameTypeDefaultDocs
transform(any -> any) | module | nilAn 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

NameTypeDefaultDocs
template%{optional(atom) => Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value} | keyword(Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value)

Options

NameTypeDefaultDocs
transform(any -> any) | module | nilAn 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

NameTypeDefaultDocs
sourceReactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueWhat to use as the source of the tenant. See Reactor.Dsl.Argument for more information.

Options

NameTypeDefaultDocs
transform(any -> any) | module | nilAn 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

NameTypeDefaultDocs
namesatom | 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

NameTypeDefaultDocs
nameatomA unique name for the step. This is used when choosing the return value of the Reactor and for arguments into other steps.
resourcesmodule | list(module)A resource or list of resources to consider in the transaction.

Options

NameTypeDefaultDocs
returnatomThe name of the step whose result will be returned as the return value of the transaction.
timeoutpos_integer | :infinity15000How 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

NameTypeDefaultDocs
namesatom | 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.

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

NameTypeDefaultDocs
nameatomA unique name for the step. This is used when choosing the return value of the Reactor and for arguments into other steps.
resourcemoduleThe resource to call the action on.
actionatomThe name of the action to call on the resource.

Options

NameTypeDefaultDocs
initialReactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe record to update.
domainmoduleThe Domain to use when calling the action. Defaults to the Domain set on the resource or in the ash section.
async?booleantrueWhen set to true the step will be executed asynchronously via Reactor's TaskSupervisor.
authorize?boolean | nilExplicitly enable or disable authorization for the action.
descriptionString.tA description for the step
undo_actionatomThe name of the action to call on the resource when the step is to be undone.
undo:always | :never | :outside_transaction:neverWhat to do when the reactor is undoing it's work? always - The undo action will always be run. never - The action will never be undone. * outside_transaction - The action will only be undone if not running inside a transaction.

reactor.update.actor

actor source

Specifies the action actor

Arguments

NameTypeDefaultDocs
sourceReactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueWhat to use as the source of the actor. See Reactor.Dsl.Argument for more information.

Options

NameTypeDefaultDocs
transform(any -> any) | module | nilAn 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

NameTypeDefaultDocs
template%{optional(atom) => Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value} | keyword(Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value)

Options

NameTypeDefaultDocs
transform(any -> any) | module | nilAn 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

NameTypeDefaultDocs
sourceReactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueWhat to use as the source of the tenant. See Reactor.Dsl.Argument for more information.

Options

NameTypeDefaultDocs
transform(any -> any) | module | nilAn 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

NameTypeDefaultDocs
namesatom | list(atom)The name of the step to wait for.

Introspection

Target: Reactor.Dsl.WaitFor

Introspection

Target: Ash.Reactor.Dsl.Update