Current section
Files
Jump to
Current section
Files
lib/schatten/workflow/depend.ex
defmodule Harnais.Form.Schatten.Workflow.Depend do
@moduledoc false
require Plymio.Fontais.Option
alias Harnais.Form.Schatten.Workflow.Edit, as: HASWE
alias Harnais.Form.Schatten.Workflow.Utility, as: HASWU
use Harnais.Form.Attribute.Schatten
import Harnais.Error,
only: [
new_error_result: 1
],
warn: false
import Plymio.Fontais.Utility,
only: [
list_wrap_flat_just: 1
]
import Harnais.Error,
only: [
new_error_result: 1
],
warn: false
@workflow_dependencies %{
{@harnais_form_schatten_workflow_verb_build, @harnais_form_schatten_field_transform_form} => [
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_bootstrap_form,
@harnais_form_schatten_value_not_set
}
],
{@harnais_form_schatten_workflow_verb_build, @harnais_form_schatten_field_transform_forms} =>
[
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_bootstrap_form,
@harnais_form_schatten_value_not_set
}
],
{@harnais_form_schatten_workflow_verb_build, @harnais_form_schatten_field_form} => [
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_transform_form,
@harnais_form_schatten_value_not_set
}
],
{@harnais_form_schatten_workflow_verb_build, @harnais_form_schatten_field_forms} => [
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_transform_forms,
@harnais_form_schatten_value_not_set
}
],
{@harnais_form_schatten_workflow_verb_build, @harnais_form_schatten_field_text} => [
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_form,
@harnais_form_schatten_value_not_set
}
],
{@harnais_form_schatten_workflow_verb_build, @harnais_form_schatten_field_texts} => [
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_forms,
@harnais_form_schatten_value_not_set
}
],
{@harnais_form_schatten_workflow_verb_build, @harnais_form_schatten_field_format_text} => [
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_text,
@harnais_form_schatten_value_not_set
}
],
{@harnais_form_schatten_workflow_verb_build, @harnais_form_schatten_field_format_texts} => [
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_texts,
@harnais_form_schatten_value_not_set
}
],
{@harnais_form_schatten_workflow_verb_build, @harnais_form_schatten_field_result} => [
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_form,
@harnais_form_schatten_value_not_set
}
],
{@harnais_form_schatten_workflow_verb_expect, @harnais_form_schatten_field_form} => [
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_form,
@harnais_form_schatten_value_not_set
}
],
{@harnais_form_schatten_workflow_verb_expect, @harnais_form_schatten_field_forms} => [
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_forms,
@harnais_form_schatten_value_not_set
}
],
{@harnais_form_schatten_workflow_verb_expect, @harnais_form_schatten_field_text} => [
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_text,
@harnais_form_schatten_value_not_set
}
],
{@harnais_form_schatten_workflow_verb_expect, @harnais_form_schatten_field_texts} => [
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_texts,
@harnais_form_schatten_value_not_set
}
],
{@harnais_form_schatten_workflow_verb_expect, @harnais_form_schatten_field_format_text} => [
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_format_text,
@harnais_form_schatten_value_not_set
}
],
{@harnais_form_schatten_workflow_verb_expect, @harnais_form_schatten_field_format_texts} => [
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_format_texts,
@harnais_form_schatten_value_not_set
}
],
{@harnais_form_schatten_workflow_verb_expect, @harnais_form_schatten_field_result} => [
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_result,
@harnais_form_schatten_value_not_set
}
],
{@harnais_form_schatten_workflow_verb_expect, @harnais_form_schatten_field_error} => [
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_error,
@harnais_form_schatten_value_not_set
}
],
{@harnais_form_schatten_workflow_verb_express, @harnais_form_schatten_field_form} => [
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_form,
@harnais_form_schatten_value_not_set
}
],
{@harnais_form_schatten_workflow_verb_express, @harnais_form_schatten_field_forms} => [
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_forms,
@harnais_form_schatten_value_not_set
}
],
{@harnais_form_schatten_workflow_verb_express, @harnais_form_schatten_field_text} => [
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_text,
@harnais_form_schatten_value_not_set
}
],
{@harnais_form_schatten_workflow_verb_express, @harnais_form_schatten_field_texts} => [
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_texts,
@harnais_form_schatten_value_not_set
}
],
{@harnais_form_schatten_workflow_verb_express, @harnais_form_schatten_field_format_text} => [
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_format_text,
@harnais_form_schatten_value_not_set
}
],
{@harnais_form_schatten_workflow_verb_express, @harnais_form_schatten_field_format_texts} => [
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_format_texts,
@harnais_form_schatten_value_not_set
}
],
{@harnais_form_schatten_workflow_verb_express, @harnais_form_schatten_field_result} => [
{
@harnais_form_schatten_workflow_verb_build,
@harnais_form_schatten_field_result,
@harnais_form_schatten_value_not_set
}
]
}
defp dependent_workflow_entry_worker(verb_field_value, dict)
defp dependent_workflow_entry_worker({verb, field, _value}, dict) do
dict
|> Map.has_key?({verb, field})
|> case do
true ->
dict
|> Map.get({verb, field})
|> list_wrap_flat_just
|> Enum.reduce_while(
[],
fn vfa, pipeline ->
with {:ok, dependencies} <- vfa |> dependent_workflow_entry_worker(dict),
{:ok, pipeline} <-
pipeline
|> HASWE.edit_workflow_pipeline([
{@harnais_form_schatten_workflow_pipeline_edit_verb_add_head, dependencies},
{@harnais_form_schatten_workflow_pipeline_edit_verb_add_tail, vfa}
]),
true <- true do
{:cont, pipeline}
else
{:error, %{__struct__: _}} = result -> {:halt, result}
end
end
)
|> case do
{:error, %{__exception__: true}} = result -> result
pipeline -> pipeline |> HASWU.validate_workflow_pipeline()
end
_ ->
{:ok, []}
end
end
def dependent_workflow_entry(verb_field_value, dict \\ @workflow_dependencies)
def dependent_workflow_entry({verb, field, value}, dict) do
with {:ok, dependencies} <- {verb, field, value} |> dependent_workflow_entry_worker(dict),
true <- true do
{:ok, dependencies}
else
{:error, %{__exception__: true}} = result -> result
end
end
end