View Source DSL: Reactor.Dsl
reactor
The top-level reactor DSL
Nested DSLs
Options
| Name | Type | Default | Docs | |
|---|---|---|---|---|
| return |
atom
|
Specify which step result to return upon completion. | ||
reactor.around
around name, fun \ nilWrap a function around a group of steps.
Nested DSLs
Options
| Name | Type | Default | Docs | |
|---|---|---|---|---|
| name * |
atom
|
A unique name of the group of steps. | ||
| fun * |
(any, any, any, any -> any) | mfa
|
The around function. See `Reactor.Step.Around` for more information. | ||
| allow_async? |
boolean
|
false
|
Whether the emitted steps should be allowed to run asynchronously. | |
reactor.around.argument
argument name, source \ nilSpecifies 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)
Options
| 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. | ||
| 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.around.wait_for
wait_for namesWait for the named step to complete before allowing this one to start.
Desugars to argument :_, result(step_to_wait_for)
Examples
wait_for :create_userOptions
| Name | Type | Default | Docs | |
|---|---|---|---|---|
| names * |
list(atom) | atom
|
The name of the step to wait for. | ||
Introspection
Target: Reactor.Dsl.WaitFor
Introspection
Target: Reactor.Dsl.Around
reactor.collect
collect nameA Reactor step which simply collects and returns it's arguments.
Arguments can optionally be transformed before returning.
Nested DSLs
Examples
collect :latest_release_uri do
argument :repository, input(:repository)
argument :organisation, input(:organisation)
transform fn inputs ->
%{uri: "https://api.github.com/repos/#{inputs.organisation}/#{inputs.repository}/releases/latest"}
end
end
Options
| Name | Type | Default | Docs | |
|---|---|---|---|---|
| name * |
atom
|
A unique name for the step. Used when choosing the return value of the Reactor and for arguments into other steps. | ||
| transform |
(any -> any) | module | nil
|
An optional transformation function which can be used to modify the entire argument map before it is returned. | ||
reactor.collect.argument
argument name, source \ nilSpecifies 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)
Options
| 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. | ||
| 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.collect.wait_for
wait_for namesWait for the named step to complete before allowing this one to start.
Desugars to argument :_, result(step_to_wait_for)
Examples
wait_for :create_userOptions
| Name | Type | Default | Docs | |
|---|---|---|---|---|
| names * |
list(atom) | atom
|
The name of the step to wait for. | ||
Introspection
Target: Reactor.Dsl.WaitFor
Introspection
Target: Reactor.Dsl.Collect
reactor.compose
compose name, reactorCompose another Reactor into this one.
Allows place another Reactor into this one as if it were a single step.
Nested DSLs
Arguments
| Name | Type | Default | Docs | |
|---|---|---|---|---|
| reactor * |
Reactor | module
|
The reactor module or struct to compose upon. | ||
Options
| Name | Type | Default | Docs | |
|---|---|---|---|---|
| name * |
atom
|
A unique name for the step. Allows the result of the composed reactor to be depended upon by steps in this reactor. | ||
reactor.compose.argument
argument name, source \ nilSpecifies 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)
Options
| 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. | ||
| 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.compose.wait_for
wait_for namesWait for the named step to complete before allowing this one to start.
Desugars to argument :_, result(step_to_wait_for)
Examples
wait_for :create_userOptions
| Name | Type | Default | Docs | |
|---|---|---|---|---|
| names * |
list(atom) | atom
|
The name of the step to wait for. | ||
Introspection
Target: Reactor.Dsl.WaitFor
Introspection
Target: Reactor.Dsl.Compose
reactor.debug
debug nameInserts a step which will send debug information to the Logger.
Nested DSLs
Examples
debug :debug do
argument :suss, result(:suss_step)
end
Options
| Name | Type | Default | Docs | |
|---|---|---|---|---|
| name * |
atom
|
A unique identifier for the step. | ||
| level |
:emergency | :alert | :critical | :error | :warning | :notice | :info | :debug
|
:debug
|
The log level to send the debug information to. | |
reactor.debug.argument
argument name, source \ nilSpecifies 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)
Options
| 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. | ||
| 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.debug.wait_for
wait_for namesWait for the named step to complete before allowing this one to start.
Desugars to argument :_, result(step_to_wait_for)
Examples
wait_for :create_userOptions
| Name | Type | Default | Docs | |
|---|---|---|---|---|
| names * |
list(atom) | atom
|
The name of the step to wait for. | ||
Introspection
Target: Reactor.Dsl.WaitFor
Introspection
Target: Reactor.Dsl.Debug
reactor.group
group nameCall functions before and after a group of steps.
Nested DSLs
Options
| Name | Type | Default | Docs | |
|---|---|---|---|---|
| name * |
atom
|
A unique name for the group of steps. | ||
| before_all * |
(any, any, any -> any) | mfa
|
The before function. See `Reactor.Step.Group` for more information. | ||
| after_all * |
(any, any, any -> any) | mfa
|
The after function. See `Reactor.Step.Group` for more information. | ||
| allow_async? |
boolean
|
true
|
Whether the emitted steps should be allowed to run asynchronously. | |
reactor.group.argument
argument name, source \ nilSpecifies 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)
Options
| 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. | ||
| 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.group.wait_for
wait_for namesWait for the named step to complete before allowing this one to start.
Desugars to argument :_, result(step_to_wait_for)
Examples
wait_for :create_userOptions
| Name | Type | Default | Docs | |
|---|---|---|---|---|
| names * |
list(atom) | atom
|
The name of the step to wait for. | ||
Introspection
Target: Reactor.Dsl.WaitFor
Introspection
Target: Reactor.Dsl.Group
reactor.input
input nameSpecifies an input to the Reactor.
An input is a value passed in to the Reactor when executing. If a Reactor were a function, these would be it's arguments.
Inputs can be transformed with an arbitrary function before being passed to any steps.
Examples
input :name
input :age do
transform &String.to_integer/1
end
Options
| Name | Type | Default | Docs | |
|---|---|---|---|---|
| name * |
atom
|
A unique name for this input. Used to allow steps to depend on it. | ||
| transform |
(any -> any) | module | nil
|
An optional transformation function which can be used to modify the input before it is passed to any steps. | ||
Introspection
Target: Reactor.Dsl.Input
reactor.step
step name, impl \ nilSpecifies a Reactor step.
Steps are the unit of work in a Reactor. Reactor will calculate the dependencies graph between the steps and execute as many as it can in each iteration.
See the Reactor.Step behaviour for more information.
Nested DSLs
Examples
step :create_user, MyApp.Steps.CreateUser do
argument :username, input(:username)
argument :password_hash, result(:hash_password)
end
step :hash_password do
argument :password, input(:password)
run fn %{password: password}, _ ->
{:ok, Bcrypt.hash_pwd_salt(password)}
end
end
Options
| Name | Type | Default | Docs | |
|---|---|---|---|---|
| name * |
atom
|
A unique name for the step. Used when choosing the return value of the Reactor and for arguments into other steps. | ||
| impl |
module | nil
|
A module that implements the `Reactor.Step` behaviour that provides the implementation. | ||
| run |
(any -> any) | mfa | (any, any -> any) | mfa
|
Provide an anonymous function which implements the `run/3` callback. Cannot be provided at the same time as the `impl` argument. | ||
| undo |
(any -> any) | mfa | (any, any -> any) | mfa | (any, any, any -> any) | mfa
|
Provide an anonymous function which implements the `undo/4` callback. Cannot be provided at the same time as the `impl` argument. | ||
| compensate |
(any -> any) | mfa | (any, any -> any) | mfa | (any, any, any -> any) | mfa
|
Provide an anonymous function which implements the `undo/4` callback. Cannot be provided at the same time as the `impl` argument. | ||
| max_retries |
:infinity | non_neg_integer
|
:infinity
|
The maximum number of times that the step can be retried before failing. Only used when the result of the `compensate/4` callback is `:retry`. | |
| async? |
boolean
|
true
|
When set to true the step will be executed asynchronously via Reactor's `TaskSupervisor`. | |
| transform |
(any -> any) | module | nil
|
An optional transformation function which can be used to modify the entire argument map before it is passed to the step. | ||
reactor.step.argument
argument name, source \ nilSpecifies 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)
Options
| 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. | ||
| 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.step.wait_for
wait_for namesWait for the named step to complete before allowing this one to start.
Desugars to argument :_, result(step_to_wait_for)
Examples
wait_for :create_userOptions
| Name | Type | Default | Docs | |
|---|---|---|---|---|
| names * |
list(atom) | atom
|
The name of the step to wait for. | ||
Introspection
Target: Reactor.Dsl.WaitFor
Introspection
Target: Reactor.Dsl.Step
reactor.switch
switch nameUse a predicate to determine which steps should be executed.
Nested DSLs
Options
| Name | Type | Default | Docs | |
|---|---|---|---|---|
| name * |
atom
|
A unique name for the switch. | ||
| on * |
Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.Value
|
The value to match against. | ||
| allow_async? |
boolean
|
true
|
Whether the emitted steps should be allowed to run asynchronously. | |
reactor.switch.matches?
matches? predicateA group of steps to run when the predicate matches.
Options
| Name | Type | Default | Docs | |
|---|---|---|---|---|
| predicate * |
(any -> any) | mfa
|
A one-arity function which is used to match the switch input. If the switch returns a truthy value, then the nested steps will be run. | ||
| allow_async? |
boolean
|
true
|
Whether the emitted steps should be allowed to run asynchronously. | |
| return |
atom
|
Specify which step result to return upon completion. | ||
Introspection
Target: Reactor.Dsl.Switch.Match
reactor.switch.default
If none of the matches? branches match the input, then the default
steps will be run if provided.
Options
| Name | Type | Default | Docs | |
|---|---|---|---|---|
| return |
atom
|
Specify which step result to return upon completion. | ||
Introspection
Target: Reactor.Dsl.Switch.Default
Introspection
Target: Reactor.Dsl.Switch