Packages
reactor
0.16.0
1.0.2
1.0.1
1.0.0
0.17.0
0.16.0
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
0.9.1
0.9.0
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.0
0.6.0
0.5.2
0.5.1
0.5.0
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.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.0
An asynchronous, graph-based execution engine
Current section
Files
Jump to
Current section
Files
lib/reactor/dsl/template.ex
defmodule Reactor.Dsl.Template do
@moduledoc """
The `template` DSL entity struct.
See `d:Reactor.template`.
"""
defstruct __identifier__: nil,
arguments: [],
description: nil,
guards: [],
name: nil,
template: nil
alias Reactor.{Builder, Dsl, Step}
require EEx
@type t :: %__MODULE__{
arguments: [Dsl.Argument.t()],
description: nil | String.t(),
guards: [Dsl.Where.t() | Dsl.Guard.t()],
name: atom,
template: String.t(),
__identifier__: any
}
@doc false
def __entity__,
do: %Spark.Dsl.Entity{
name: :template,
describe: """
A step which passes all it's arguments as assigns into an `EEx` template and returns the result.
""",
examples: [
~s|
template :welcome_message do
arguments :user
template """
Welcome <%= @user.name %>! 🎉
"""
end
|
],
args: [:name],
target: __MODULE__,
identifier: :name,
entities: [
arguments: [Dsl.Argument.__entity__(), Dsl.WaitFor.__entity__()],
guards: [Dsl.Where.__entity__(), Dsl.Guard.__entity__()]
],
recursive_as: :steps,
schema: [
name: [
type: :atom,
required: true,
doc: """
A unique name for the step. Used when choosing the return value of the Reactor and for arguments into other steps.
"""
],
description: [
type: :string,
required: false,
doc: """
An optional description for the step.
"""
],
template: [
type: :string,
required: true,
doc: "An `EEx` template."
]
]
}
defimpl Dsl.Build do
def build(template, reactor) do
Builder.add_step(
reactor,
template.name,
{Step.Template, template: template.template},
template.arguments,
async?: true,
description: template.description,
guards: template.guards,
max_retries: 1,
ref: :step_name
)
end
def verify(_template, _dsl_state), do: :ok
end
end