Packages
mozart
0.1.9
1.0.1
1.0.0
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Mozart is an Elixir based BPM platform. It provides a powerful and highly readable DSL for implementing executable business process models.
Current section
86 Versions
Jump to
Current section
86 Versions
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…