Current section

86 Versions

Jump to

Compare versions

6 files changed
+37 additions
-36 deletions
  @@ -1,6 +1,6 @@
1 1 {<<"links">>,[{<<"GitHub">>,<<"https://github.com/CharlesIrvineKC/mozart">>}]}.
2 2 {<<"name">>,<<"mozart">>}.
3 - {<<"version">>,<<"0.1.8">>}.
3 + {<<"version">>,<<"0.1.9">>}.
4 4 {<<"description">>,
5 5 <<"Mozart is a BPM platform written in Elixir. It is currently in active development, but it has sufficient\nfunctionality for at least experimental use.">>}.
6 6 {<<"elixir">>,<<"~> 1.16">>}.
  @@ -60,8 +60,8 @@ defmodule Mozart.Examples.Example do
60 60 tasks: [
61 61 %Rule{
62 62 name: :loan_decision,
63 - decision_args: :loan_args,
64 - tablex:
63 + input_fields: [:income],
64 + rule_table:
65 65 Tablex.new("""
66 66 F income || status
67 67 1 > 50000 || approved
  @@ -76,7 +76,7 @@ defmodule Mozart.Examples.Example do
76 76
77 77 def run_get_loan_models do
78 78 PMS.load_process_models(get_loan_models())
79 - data = %{loan_args: [income: 3000]}
79 + data = %{income: 3000}
80 80
81 81 {:ok, ppid, uid} = PE.start_process(:loan_approval, data)
82 82 PE.execute(ppid)
  @@ -426,13 +426,14 @@ defmodule Mozart.ProcessEngine do
426 426 |> execute_process()
427 427 end
428 428
429 - defp complete_decision_task(state, task) do
429 + defp complete_rule_task(state, task) do
430 430 Logger.info("Complete run task [#{task.name}[#{task.uid}]")
431 - data = Map.merge(state.data, Tablex.decide(task.tablex, state.data[task.decision_args]))
431 + arguments = Map.take(state.data, task.input_fields) |> Map.to_list()
432 + data = Map.merge(state.data, Tablex.decide(task.rule_table, arguments))
432 433 Map.put(state, :data, data) |> update_task_state(task) |> execute_process()
433 434 end
434 435
435 - defp complete_parallel_task_i(state, task) do
436 + defp complete_parallel_task(state, task) do
436 437 Logger.info("Complete parallel task [#{task.name}]")
437 438 next_states = task.multi_next
438 439
  @@ -464,7 +465,7 @@ defmodule Mozart.ProcessEngine do
464 465 |> execute_process()
465 466 end
466 467
467 - defp complete_subprocess_task_i(state, task) do
468 + defp complete_subprocess_task(state, task) do
468 469 Logger.info("Complete subprocess task [#{task.name}][#{task.uid}]")
469 470 data = Map.merge(task.data, state.data)
470 471 Map.put(state, :data, data) |> update_task_state(task) |> execute_process()
  @@ -500,36 +501,36 @@ defmodule Mozart.ProcessEngine do
500 501
501 502 defp execute_process(state) do
502 503 if work_remaining(state) do
503 - complete_able_task_i = get_complete_able_task(state)
504 + complete_able_task = get_complete_able_task(state)
504 505
505 - if complete_able_task_i do
506 + if complete_able_task do
506 507 cond do
507 - complete_able_task_i.type == :service ->
508 - complete_service_task(state, complete_able_task_i)
508 + complete_able_task.type == :service ->
509 + complete_service_task(state, complete_able_task)
509 510
510 - complete_able_task_i.type == :choice ->
511 - complete_choice_task(state, complete_able_task_i)
511 + complete_able_task.type == :choice ->
512 + complete_choice_task(state, complete_able_task)
512 513
513 - complete_able_task_i.type == :sub_process ->
514 - complete_subprocess_task_i(state, complete_able_task_i)
514 + complete_able_task.type == :sub_process ->
515 + complete_subprocess_task(state, complete_able_task)
515 516
516 - complete_able_task_i.type == :parallel ->
517 - complete_parallel_task_i(state, complete_able_task_i)
517 + complete_able_task.type == :parallel ->
518 + complete_parallel_task(state, complete_able_task)
518 519
519 - complete_able_task_i.type == :join ->
520 - complete_join_task(state, complete_able_task_i)
520 + complete_able_task.type == :join ->
521 + complete_join_task(state, complete_able_task)
521 522
522 - complete_able_task_i.type == :timer ->
523 - complete_timer_task(state, complete_able_task_i)
523 + complete_able_task.type == :timer ->
524 + complete_timer_task(state, complete_able_task)
524 525
525 - complete_able_task_i.type == :receive ->
526 - complete_receive_event_task(state, complete_able_task_i)
526 + complete_able_task.type == :receive ->
527 + complete_receive_event_task(state, complete_able_task)
527 528
528 - complete_able_task_i.type == :send ->
529 - complete_send_event_task(state, complete_able_task_i)
529 + complete_able_task.type == :send ->
530 + complete_send_event_task(state, complete_able_task)
530 531
531 - complete_able_task_i.type == :rule ->
532 - complete_decision_task(state, complete_able_task_i)
532 + complete_able_task.type == :rule ->
533 + complete_rule_task(state, complete_able_task)
533 534 end
534 535 else
535 536 state
  @@ -20,8 +20,8 @@ defmodule Mozart.ProcessModels.TestModels do
20 20 tasks: [
21 21 %Rule{
22 22 name: :loan_decision,
23 - decision_args: :loan_args,
24 - tablex:
23 + input_fields: [:income],
24 + rule_table:
25 25 Tablex.new("""
26 26 F income || status
27 27 1 > 50000 || approved
  @@ -1,7 +1,7 @@
1 1 defmodule Mozart.Task.Rule do
2 2 @moduledoc """
3 3 Used to model a Mozart run task. Called a Business Rule in BPMN2. Uses
4 - the Elixir [tablex](https://hex.pm/packages/tablex) library.
4 + the Elixir [rule_table](https://hex.pm/packages/rule_table) library.
5 5
6 6 Example:
7 7
  @@ -11,8 +11,8 @@ defmodule Mozart.Task.Rule do
11 11 tasks: [
12 12 %Decision{
13 13 name: :loan_decision,
14 - decision_args: :loan_args,
15 - tablex:
14 + input_fields: [:income],
15 + rule_table:
16 16 Tablex.new(\"""
17 17 F income || status
18 18 1 > 50000 || approved
  @@ -29,8 +29,8 @@ defmodule Mozart.Task.Rule do
29 29 :name,
30 30 :next,
31 31 :uid,
32 - :tablex,
33 - :decision_args,
32 + :rule_table,
33 + :input_fields,
34 34 type: :rule
35 35 ]
36 36 end
Loading more files…