mirror of
https://github.com/ash-project/ash.git
synced 2024-09-20 21:43:02 +12:00
55 lines
1.4 KiB
Elixir
55 lines
1.4 KiB
Elixir
defmodule Ash.Test.Flow.Flows.Branching do
|
|
@moduledoc false
|
|
use Ash.Flow
|
|
|
|
flow do
|
|
argument :do_branch, :boolean do
|
|
allow_nil? false
|
|
default false
|
|
end
|
|
|
|
argument :do_inner_branch, :boolean do
|
|
allow_nil? false
|
|
default false
|
|
end
|
|
|
|
argument :do_second_branch, :boolean do
|
|
allow_nil? false
|
|
default false
|
|
end
|
|
|
|
returns [:branch, :second_branch]
|
|
end
|
|
|
|
steps do
|
|
branch :branch, arg(:do_branch) do
|
|
branch :inner_branch, arg(:do_inner_branch) do
|
|
custom :inner_branch_return, Ash.Test.Flow.Steps.SimpleReturn do
|
|
input %{return: "inner_branch happened"}
|
|
end
|
|
end
|
|
|
|
branch :inner_branch_alt, expr(not (^arg(:do_inner_branch) || false)) do
|
|
custom :inner_branch_alt_return, Ash.Test.Flow.Steps.SimpleReturn do
|
|
input %{return: "inner_branch didn't happen"}
|
|
end
|
|
end
|
|
|
|
custom :branch_result, Ash.Test.Flow.Steps.SimpleReturn do
|
|
input %{return: expr(^result(:inner_branch) || ^result(:inner_branch_alt))}
|
|
end
|
|
end
|
|
|
|
branch :second_branch, arg(:do_second_branch) do
|
|
custom :second_branch_return, Ash.Test.Flow.Steps.SimpleReturn do
|
|
input %{return: "second_branch happened"}
|
|
end
|
|
end
|
|
|
|
custom :depends_on_inner_branch_step, fn %{second_branch_return: value}, _ ->
|
|
{:ok, value}
|
|
end do
|
|
input %{second_branch_return: result(:second_branch_return)}
|
|
end
|
|
end
|
|
end
|