ruote 2.2.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.txt +166 -1
- data/CREDITS.txt +36 -17
- data/LICENSE.txt +1 -1
- data/README.rdoc +1 -7
- data/Rakefile +38 -29
- data/TODO.txt +93 -52
- data/lib/ruote-fs.rb +3 -0
- data/lib/ruote.rb +5 -1
- data/lib/ruote/context.rb +140 -35
- data/lib/ruote/dashboard.rb +1247 -0
- data/lib/ruote/{engine → dboard}/process_error.rb +22 -2
- data/lib/ruote/dboard/process_status.rb +587 -0
- data/lib/ruote/engine.rb +6 -871
- data/lib/ruote/exp/command.rb +7 -2
- data/lib/ruote/exp/commanded.rb +2 -2
- data/lib/ruote/exp/condition.rb +38 -13
- data/lib/ruote/exp/fe_add_branches.rb +1 -1
- data/lib/ruote/exp/fe_apply.rb +1 -1
- data/lib/ruote/exp/fe_await.rb +357 -0
- data/lib/ruote/exp/fe_cancel_process.rb +17 -3
- data/lib/ruote/exp/fe_command.rb +8 -4
- data/lib/ruote/exp/fe_concurrence.rb +218 -18
- data/lib/ruote/exp/fe_concurrent_iterator.rb +71 -10
- data/lib/ruote/exp/fe_cron.rb +3 -10
- data/lib/ruote/exp/fe_cursor.rb +14 -4
- data/lib/ruote/exp/fe_define.rb +3 -1
- data/lib/ruote/exp/fe_echo.rb +1 -1
- data/lib/ruote/exp/fe_equals.rb +1 -1
- data/lib/ruote/exp/fe_error.rb +1 -1
- data/lib/ruote/exp/fe_filter.rb +163 -4
- data/lib/ruote/exp/fe_forget.rb +21 -4
- data/lib/ruote/exp/fe_given.rb +1 -1
- data/lib/ruote/exp/fe_if.rb +1 -1
- data/lib/ruote/exp/fe_inc.rb +102 -35
- data/lib/ruote/exp/fe_iterator.rb +47 -12
- data/lib/ruote/exp/fe_listen.rb +96 -11
- data/lib/ruote/exp/fe_lose.rb +31 -4
- data/lib/ruote/exp/fe_noop.rb +1 -1
- data/lib/ruote/exp/fe_on_error.rb +109 -0
- data/lib/ruote/exp/fe_once.rb +10 -19
- data/lib/ruote/exp/fe_participant.rb +90 -28
- data/lib/ruote/exp/fe_read.rb +69 -0
- data/lib/ruote/exp/fe_redo.rb +3 -2
- data/lib/ruote/exp/fe_ref.rb +57 -27
- data/lib/ruote/exp/fe_registerp.rb +1 -3
- data/lib/ruote/exp/fe_reserve.rb +1 -1
- data/lib/ruote/exp/fe_restore.rb +6 -6
- data/lib/ruote/exp/fe_save.rb +12 -19
- data/lib/ruote/exp/fe_sequence.rb +38 -2
- data/lib/ruote/exp/fe_set.rb +143 -40
- data/lib/ruote/exp/{fe_let.rb → fe_stall.rb} +7 -38
- data/lib/ruote/exp/fe_subprocess.rb +8 -2
- data/lib/ruote/exp/fe_that.rb +1 -1
- data/lib/ruote/exp/fe_undo.rb +40 -4
- data/lib/ruote/exp/fe_unregisterp.rb +1 -3
- data/lib/ruote/exp/fe_wait.rb +12 -25
- data/lib/ruote/exp/{flowexpression.rb → flow_expression.rb} +375 -229
- data/lib/ruote/exp/iterator.rb +2 -2
- data/lib/ruote/exp/merge.rb +78 -17
- data/lib/ruote/exp/ro_attributes.rb +46 -36
- data/lib/ruote/exp/ro_filters.rb +34 -8
- data/lib/ruote/exp/ro_on_x.rb +431 -0
- data/lib/ruote/exp/ro_persist.rb +19 -7
- data/lib/ruote/exp/ro_timers.rb +123 -0
- data/lib/ruote/exp/ro_variables.rb +90 -29
- data/lib/ruote/fei.rb +57 -3
- data/lib/ruote/fs.rb +3 -0
- data/lib/ruote/id/mnemo_wfid_generator.rb +30 -7
- data/lib/ruote/id/wfid_generator.rb +17 -38
- data/lib/ruote/log/default_history.rb +23 -9
- data/lib/ruote/log/fancy_printing.rb +265 -0
- data/lib/ruote/log/storage_history.rb +23 -13
- data/lib/ruote/log/wait_logger.rb +224 -17
- data/lib/ruote/observer.rb +82 -0
- data/lib/ruote/part/block_participant.rb +65 -28
- data/lib/ruote/part/code_participant.rb +81 -0
- data/lib/ruote/part/engine_participant.rb +7 -2
- data/lib/ruote/part/local_participant.rb +221 -21
- data/lib/ruote/part/no_op_participant.rb +1 -1
- data/lib/ruote/part/null_participant.rb +1 -1
- data/lib/ruote/part/participant.rb +50 -0
- data/lib/ruote/part/rev_participant.rb +178 -0
- data/lib/ruote/part/smtp_participant.rb +2 -2
- data/lib/ruote/part/storage_participant.rb +228 -60
- data/lib/ruote/part/template.rb +1 -1
- data/lib/ruote/participant.rb +2 -0
- data/lib/ruote/reader.rb +205 -68
- data/lib/ruote/reader/json.rb +49 -0
- data/lib/ruote/reader/radial.rb +303 -0
- data/lib/ruote/reader/ruby_dsl.rb +44 -9
- data/lib/ruote/reader/xml.rb +11 -8
- data/lib/ruote/receiver/base.rb +98 -45
- data/lib/ruote/storage/base.rb +104 -35
- data/lib/ruote/storage/composite_storage.rb +50 -60
- data/lib/ruote/storage/fs_storage.rb +25 -34
- data/lib/ruote/storage/hash_storage.rb +38 -36
- data/lib/ruote/svc/dispatch_pool.rb +104 -35
- data/lib/ruote/svc/dollar_sub.rb +10 -8
- data/lib/ruote/svc/error_handler.rb +108 -52
- data/lib/ruote/svc/expression_map.rb +3 -3
- data/lib/ruote/svc/participant_list.rb +160 -55
- data/lib/ruote/svc/tracker.rb +31 -31
- data/lib/ruote/svc/treechecker.rb +28 -16
- data/lib/ruote/tree_dot.rb +1 -1
- data/lib/ruote/util/deep.rb +143 -0
- data/lib/ruote/util/filter.rb +125 -18
- data/lib/ruote/util/hashdot.rb +15 -13
- data/lib/ruote/util/look.rb +1 -1
- data/lib/ruote/util/lookup.rb +60 -22
- data/lib/ruote/util/misc.rb +63 -18
- data/lib/ruote/util/mpatch.rb +53 -0
- data/lib/ruote/util/ometa.rb +1 -2
- data/lib/ruote/util/process_observer.rb +177 -0
- data/lib/ruote/util/subprocess.rb +1 -1
- data/lib/ruote/util/time.rb +2 -2
- data/lib/ruote/util/tree.rb +64 -2
- data/lib/ruote/version.rb +3 -2
- data/lib/ruote/worker.rb +421 -92
- data/lib/ruote/workitem.rb +157 -22
- data/ruote.gemspec +15 -9
- data/test/bm/ci.rb +0 -2
- data/test/bm/ici.rb +0 -2
- data/test/bm/load_26c.rb +0 -3
- data/test/bm/mega.rb +0 -2
- data/test/functional/base.rb +57 -43
- data/test/functional/concurrent_base.rb +16 -13
- data/test/functional/ct_0_concurrence.rb +7 -11
- data/test/functional/ct_1_iterator.rb +9 -11
- data/test/functional/ct_2_cancel.rb +28 -17
- data/test/functional/eft_0_flow_expression.rb +35 -0
- data/test/functional/eft_10_cancel_process.rb +1 -1
- data/test/functional/eft_11_wait.rb +13 -13
- data/test/functional/eft_12_listen.rb +199 -66
- data/test/functional/eft_13_iterator.rb +95 -29
- data/test/functional/eft_14_cursor.rb +74 -24
- data/test/functional/eft_15_loop.rb +7 -7
- data/test/functional/eft_16_if.rb +1 -1
- data/test/functional/eft_17_equals.rb +1 -1
- data/test/functional/eft_18_concurrent_iterator.rb +156 -68
- data/test/functional/eft_19_reserve.rb +15 -15
- data/test/functional/eft_1_echo.rb +1 -1
- data/test/functional/eft_20_save.rb +51 -9
- data/test/functional/eft_21_restore.rb +1 -1
- data/test/functional/eft_22_noop.rb +1 -1
- data/test/functional/eft_23_apply.rb +1 -1
- data/test/functional/eft_24_add_branches.rb +7 -8
- data/test/functional/eft_25_command.rb +1 -1
- data/test/functional/eft_26_error.rb +11 -11
- data/test/functional/eft_27_inc.rb +111 -67
- data/test/functional/eft_28_once.rb +16 -16
- data/test/functional/eft_29_cron.rb +9 -9
- data/test/functional/eft_2_sequence.rb +23 -4
- data/test/functional/eft_30_ref.rb +36 -24
- data/test/functional/eft_31_registerp.rb +24 -24
- data/test/functional/eft_32_lose.rb +46 -20
- data/test/functional/eft_34_given.rb +1 -1
- data/test/functional/eft_35_filter.rb +161 -7
- data/test/functional/eft_36_read.rb +97 -0
- data/test/functional/{eft_0_process_definition.rb → eft_37_process_definition.rb} +4 -4
- data/test/functional/eft_38_on_error.rb +195 -0
- data/test/functional/eft_39_stall.rb +35 -0
- data/test/functional/eft_3_participant.rb +77 -22
- data/test/functional/eft_40_await.rb +297 -0
- data/test/functional/eft_4_set.rb +110 -11
- data/test/functional/eft_5_subprocess.rb +27 -5
- data/test/functional/eft_6_concurrence.rb +299 -60
- data/test/functional/eft_7_forget.rb +24 -22
- data/test/functional/eft_8_undo.rb +52 -15
- data/test/functional/eft_9_redo.rb +18 -20
- data/test/functional/ft_0_worker.rb +122 -13
- data/test/functional/ft_10_dollar.rb +77 -16
- data/test/functional/ft_11_recursion.rb +9 -9
- data/test/functional/ft_12_launchitem.rb +7 -9
- data/test/functional/ft_13_variables.rb +125 -22
- data/test/functional/ft_14_re_apply.rb +112 -56
- data/test/functional/ft_15_timeout.rb +64 -33
- data/test/functional/ft_16_participant_params.rb +59 -6
- data/test/functional/ft_17_conditional.rb +68 -2
- data/test/functional/ft_18_kill.rb +48 -30
- data/test/functional/ft_19_participant_code.rb +67 -0
- data/test/functional/ft_1_process_status.rb +222 -150
- data/test/functional/ft_20_storage_participant.rb +445 -44
- data/test/functional/ft_21_forget.rb +21 -26
- data/test/functional/ft_22_process_definitions.rb +8 -6
- data/test/functional/ft_23_load_defs.rb +29 -5
- data/test/functional/ft_24_block_participant.rb +199 -20
- data/test/functional/ft_25_receiver.rb +98 -46
- data/test/functional/ft_26_participant_rtimeout.rb +34 -26
- data/test/functional/ft_27_var_indirection.rb +40 -5
- data/test/functional/ft_28_null_noop_participants.rb +5 -5
- data/test/functional/ft_29_part_template.rb +2 -2
- data/test/functional/ft_2_errors.rb +106 -74
- data/test/functional/ft_30_smtp_participant.rb +7 -7
- data/test/functional/ft_31_part_blocking.rb +11 -11
- data/test/functional/ft_32_scope.rb +50 -0
- data/test/functional/ft_33_participant_subprocess_priority.rb +3 -3
- data/test/functional/ft_34_cursor_rewind.rb +14 -14
- data/test/functional/ft_35_add_service.rb +67 -9
- data/test/functional/ft_36_storage_history.rb +92 -24
- data/test/functional/ft_37_default_history.rb +35 -23
- data/test/functional/ft_38_participant_more.rb +189 -32
- data/test/functional/ft_39_wait_for.rb +25 -25
- data/test/functional/ft_3_participant_registration.rb +235 -107
- data/test/functional/ft_40_wait_logger.rb +105 -18
- data/test/functional/ft_41_participants.rb +13 -12
- data/test/functional/ft_42_storage_copy.rb +12 -12
- data/test/functional/ft_43_participant_on_reply.rb +85 -11
- data/test/functional/ft_44_var_participant.rb +5 -5
- data/test/functional/ft_45_participant_accept.rb +3 -3
- data/test/functional/ft_46_launch_single.rb +17 -17
- data/test/functional/ft_47_wfids.rb +41 -0
- data/test/functional/ft_48_lose.rb +19 -25
- data/test/functional/ft_49_engine_on_error.rb +54 -70
- data/test/functional/ft_4_cancel.rb +84 -26
- data/test/functional/ft_50_engine_config.rb +4 -4
- data/test/functional/ft_51_misc.rb +12 -12
- data/test/functional/ft_52_case.rb +17 -17
- data/test/functional/ft_53_engine_on_terminate.rb +18 -21
- data/test/functional/ft_54_patterns.rb +18 -16
- data/test/functional/ft_55_engine_participant.rb +55 -55
- data/test/functional/ft_56_filter_attribute.rb +90 -52
- data/test/functional/ft_57_rev_participant.rb +252 -0
- data/test/functional/ft_58_workitem.rb +150 -0
- data/test/functional/ft_59_pause.rb +329 -0
- data/test/functional/ft_5_on_error.rb +430 -77
- data/test/functional/ft_60_code_participant.rb +65 -0
- data/test/functional/ft_61_trailing_fields.rb +34 -0
- data/test/functional/ft_62_exp_name_and_dollar_substitution.rb +35 -0
- data/test/functional/ft_63_participants_221.rb +458 -0
- data/test/functional/ft_64_stash.rb +41 -0
- data/test/functional/ft_65_timers.rb +313 -0
- data/test/functional/ft_66_flank.rb +133 -0
- data/test/functional/ft_67_radial_misc.rb +34 -0
- data/test/functional/ft_68_reput.rb +72 -0
- data/test/functional/ft_69_worker_info.rb +56 -0
- data/test/functional/ft_6_on_cancel.rb +189 -36
- data/test/functional/ft_70_take_and_discard_attributes.rb +94 -0
- data/test/functional/ft_71_retries.rb +144 -0
- data/test/functional/ft_72_on_terminate.rb +60 -0
- data/test/functional/ft_73_raise_msg.rb +107 -0
- data/test/functional/ft_74_respark.rb +106 -0
- data/test/functional/ft_75_context.rb +66 -0
- data/test/functional/ft_76_observer.rb +53 -0
- data/test/functional/ft_77_process_observer.rb +157 -0
- data/test/functional/ft_78_part_participant.rb +37 -0
- data/test/functional/ft_7_tags.rb +238 -50
- data/test/functional/ft_8_participant_consumption.rb +27 -21
- data/test/functional/ft_9_subprocesses.rb +48 -18
- data/test/functional/restart_base.rb +4 -6
- data/test/functional/rt_0_wait.rb +10 -10
- data/test/functional/rt_1_listen.rb +6 -6
- data/test/functional/rt_2_errors.rb +12 -12
- data/test/functional/rt_3_once.rb +17 -12
- data/test/functional/rt_4_cron.rb +17 -17
- data/test/functional/rt_5_timeout.rb +13 -13
- data/test/functional/signals.rb +103 -0
- data/test/functional/storage.rb +730 -0
- data/test/functional/storage_helper.rb +48 -35
- data/test/functional/test.rb +6 -2
- data/test/misc/idle.rb +21 -0
- data/test/misc/light.rb +29 -0
- data/test/path_helper.rb +1 -1
- data/test/test.rb +2 -5
- data/test/test_helper.rb +13 -0
- data/test/unit/test.rb +1 -4
- data/test/unit/ut_0_ruby_reader.rb +25 -9
- data/test/unit/ut_10_participants.rb +47 -0
- data/test/unit/ut_11_lookup.rb +59 -2
- data/test/unit/ut_12_wait_logger.rb +123 -0
- data/test/unit/ut_14_is_uri.rb +1 -1
- data/test/unit/ut_15_util.rb +1 -1
- data/test/unit/ut_16_reader.rb +136 -14
- data/test/unit/ut_17_merge.rb +155 -0
- data/test/unit/ut_19_part_template.rb +1 -1
- data/test/unit/ut_1_fei.rb +11 -2
- data/test/unit/ut_20_composite_storage.rb +27 -1
- data/test/unit/{ut_21_participant_list.rb → ut_21_svc_participant_list.rb} +2 -3
- data/test/unit/ut_22_filter.rb +231 -10
- data/test/unit/ut_23_svc_tracker.rb +48 -0
- data/test/unit/ut_24_radial_reader.rb +458 -0
- data/test/unit/ut_25_process_status.rb +143 -0
- data/test/unit/ut_26_deep.rb +131 -0
- data/test/unit/ut_2_dashboard.rb +114 -0
- data/test/unit/ut_3_worker.rb +54 -0
- data/test/unit/ut_4_expmap.rb +1 -1
- data/test/unit/ut_5_tree.rb +23 -23
- data/test/unit/ut_6_condition.rb +71 -29
- data/test/unit/ut_7_workitem.rb +18 -4
- data/test/unit/ut_8_tree_to_dot.rb +1 -1
- data/test/unit/ut_9_xml_reader.rb +1 -1
- metadata +142 -63
- data/jruby_issue.txt +0 -32
- data/lib/ruote/engine/process_status.rb +0 -403
- data/lib/ruote/log/pretty.rb +0 -165
- data/lib/ruote/log/test_logger.rb +0 -204
- data/lib/ruote/util/serializer.rb +0 -103
- data/phil.txt +0 -14
- data/test/functional/eft_33_let.rb +0 -31
- data/test/functional/ft_19_alias.rb +0 -33
- data/test/functional/ft_47_wfid_generator.rb +0 -54
- data/test/unit/storage.rb +0 -403
- data/test/unit/storages.rb +0 -37
- data/test/unit/ut_13_serializer.rb +0 -65
- data/test/unit/ut_18_engine.rb +0 -47
- data/test/unit/ut_3_wait_logger.rb +0 -39
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#--
|
|
2
|
-
# Copyright (c) 2005-
|
|
2
|
+
# Copyright (c) 2005-2012, John Mettraux, jmettraux@gmail.com
|
|
3
3
|
#
|
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
5
|
# of this software and associated documentation files (the "Software"), to deal
|
|
@@ -25,8 +25,6 @@
|
|
|
25
25
|
|
|
26
26
|
module Ruote::Exp
|
|
27
27
|
|
|
28
|
-
#
|
|
29
|
-
# (Since ruote 2.1.12)
|
|
30
28
|
#
|
|
31
29
|
# This expressions lets one register participants directly from a process
|
|
32
30
|
# definition.
|
data/lib/ruote/exp/fe_reserve.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#--
|
|
2
|
-
# Copyright (c) 2005-
|
|
2
|
+
# Copyright (c) 2005-2012, John Mettraux, jmettraux@gmail.com
|
|
3
3
|
#
|
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
5
|
# of this software and associated documentation files (the "Software"), to deal
|
data/lib/ruote/exp/fe_restore.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#--
|
|
2
|
-
# Copyright (c) 2005-
|
|
2
|
+
# Copyright (c) 2005-2012, John Mettraux, jmettraux@gmail.com
|
|
3
3
|
#
|
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
5
|
# of this software and associated documentation files (the "Software"), to deal
|
|
@@ -56,6 +56,7 @@ module Ruote::Exp
|
|
|
56
56
|
class RestoreExpression < FlowExpression
|
|
57
57
|
|
|
58
58
|
include MergeMixin
|
|
59
|
+
# still have to implement something about merge...
|
|
59
60
|
|
|
60
61
|
names :restore, :set_fields
|
|
61
62
|
|
|
@@ -66,9 +67,8 @@ module Ruote::Exp
|
|
|
66
67
|
has_attribute(*%w[ f fld field ].map { |k| "from_#{k}" }) ||
|
|
67
68
|
has_attribute(*%w[ val value ])
|
|
68
69
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
has_attribute('to')
|
|
70
|
+
_, to_f = determine_tos
|
|
71
|
+
# note : to_v is discarded (the underscore)
|
|
72
72
|
|
|
73
73
|
from = 'from_var' if from == 'from_v'
|
|
74
74
|
|
|
@@ -82,8 +82,8 @@ module Ruote::Exp
|
|
|
82
82
|
afrom
|
|
83
83
|
end
|
|
84
84
|
|
|
85
|
-
if
|
|
86
|
-
Ruote.set(h.applied_workitem['fields'],
|
|
85
|
+
if to_f
|
|
86
|
+
Ruote.set(h.applied_workitem['fields'], to_f, fields)
|
|
87
87
|
else
|
|
88
88
|
h.applied_workitem['fields'] = fields
|
|
89
89
|
end
|
data/lib/ruote/exp/fe_save.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#--
|
|
2
|
-
# Copyright (c) 2005-
|
|
2
|
+
# Copyright (c) 2005-2012, John Mettraux, jmettraux@gmail.com
|
|
3
3
|
#
|
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
5
|
# of this software and associated documentation files (the "Software"), to deal
|
|
@@ -23,18 +23,21 @@
|
|
|
23
23
|
#++
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
|
|
27
26
|
module Ruote::Exp
|
|
28
27
|
|
|
29
28
|
#
|
|
30
29
|
# Saves the current workitem fields into a variable or into a field.
|
|
31
30
|
#
|
|
32
31
|
# save :to_field => 'old_workitem'
|
|
32
|
+
# # or
|
|
33
|
+
# save :to => 'f:old_workitem'
|
|
33
34
|
# #
|
|
34
35
|
# # saves a copy of the fields of the current workitem into itself,
|
|
35
36
|
# # in the field named 'old_workitem'
|
|
36
37
|
#
|
|
37
38
|
# save :to_variable => '/wix'
|
|
39
|
+
# # or
|
|
40
|
+
# save :to => 'v:/wix'
|
|
38
41
|
# #
|
|
39
42
|
# # saves a copy of the current workitem in the varialbe 'wix' at
|
|
40
43
|
# # the root of the process
|
|
@@ -47,24 +50,14 @@ module Ruote::Exp
|
|
|
47
50
|
|
|
48
51
|
def apply
|
|
49
52
|
|
|
50
|
-
|
|
51
|
-
has_attribute(*%w[ v var variable ].map { |k| "to_#{k}" }) ||
|
|
52
|
-
has_attribute(*%w[ f fld field ].map { |k| "to_#{k}" })
|
|
53
|
-
|
|
54
|
-
return reply_to_parent(h.applied_workitem) unless tk
|
|
55
|
-
|
|
56
|
-
key = attribute(tk)
|
|
57
|
-
|
|
58
|
-
if tk.match(/^to_v/)
|
|
59
|
-
|
|
60
|
-
set_variable(key, h.applied_workitem['fields'])
|
|
61
|
-
|
|
62
|
-
elsif tk.match(/^to_f/)
|
|
53
|
+
to_v, to_f = determine_tos
|
|
63
54
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
55
|
+
if to_v
|
|
56
|
+
set_variable(to_v, h.applied_workitem['fields'])
|
|
57
|
+
elsif to_f
|
|
58
|
+
set_f(to_f, Ruote.fulldup(h.applied_workitem['fields']))
|
|
59
|
+
#else
|
|
60
|
+
# do nothing
|
|
68
61
|
end
|
|
69
62
|
|
|
70
63
|
reply_to_parent(h.applied_workitem)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#--
|
|
2
|
-
# Copyright (c) 2005-
|
|
2
|
+
# Copyright (c) 2005-2012, John Mettraux, jmettraux@gmail.com
|
|
3
3
|
#
|
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
5
|
# of this software and associated documentation files (the "Software"), to deal
|
|
@@ -34,12 +34,48 @@ module Ruote::Exp
|
|
|
34
34
|
# participant 'charly'
|
|
35
35
|
# end
|
|
36
36
|
#
|
|
37
|
+
#
|
|
38
|
+
# == using 'let'
|
|
39
|
+
#
|
|
40
|
+
# 'let' behaves like a sequence, but the children have their own variable
|
|
41
|
+
# scope.
|
|
42
|
+
#
|
|
43
|
+
# pdef = Ruote.process_definition do
|
|
44
|
+
# set 'v:var' => 'val'
|
|
45
|
+
# echo "out:${v:var}"
|
|
46
|
+
# let do
|
|
47
|
+
# set 'v:var' => 'val1'
|
|
48
|
+
# echo "in:${v:var}"
|
|
49
|
+
# end
|
|
50
|
+
# echo "out:${v:var}"
|
|
51
|
+
# end
|
|
52
|
+
#
|
|
53
|
+
# # => out:val, in:val1, out:val
|
|
54
|
+
#
|
|
55
|
+
#
|
|
56
|
+
# == as a 'case' statement
|
|
57
|
+
#
|
|
58
|
+
# let do
|
|
59
|
+
# define 'published' do
|
|
60
|
+
# do_this
|
|
61
|
+
# end
|
|
62
|
+
# define 'reviewed' do
|
|
63
|
+
# do_that
|
|
64
|
+
# end
|
|
65
|
+
# subprocess '${case}'
|
|
66
|
+
# end
|
|
67
|
+
#
|
|
68
|
+
# Subprocesses 'published' and 'reviewed' are bound in a local scope,
|
|
69
|
+
# that gets discarded when the let exits.
|
|
70
|
+
#
|
|
37
71
|
class SequenceExpression < FlowExpression
|
|
38
72
|
|
|
39
|
-
names :sequence
|
|
73
|
+
names :sequence, :let
|
|
40
74
|
|
|
41
75
|
def apply
|
|
42
76
|
|
|
77
|
+
h.variables ||= {} if name == 'let'
|
|
78
|
+
|
|
43
79
|
reply(h.applied_workitem)
|
|
44
80
|
end
|
|
45
81
|
|
data/lib/ruote/exp/fe_set.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#--
|
|
2
|
-
# Copyright (c) 2005-
|
|
2
|
+
# Copyright (c) 2005-2012, John Mettraux, jmettraux@gmail.com
|
|
3
3
|
#
|
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
5
|
# of this software and associated documentation files (the "Software"), to deal
|
|
@@ -22,6 +22,8 @@
|
|
|
22
22
|
# Made in Japan.
|
|
23
23
|
#++
|
|
24
24
|
|
|
25
|
+
require 'ruote/exp/fe_sequence'
|
|
26
|
+
|
|
25
27
|
|
|
26
28
|
module Ruote::Exp
|
|
27
29
|
|
|
@@ -58,6 +60,33 @@ module Ruote::Exp
|
|
|
58
60
|
#
|
|
59
61
|
# set :f => 'my_field', :value => 'oh and ${whatever}', :escape => true
|
|
60
62
|
#
|
|
63
|
+
# == :override / :over
|
|
64
|
+
#
|
|
65
|
+
# (attribute introduced in ruote 2.3.0)
|
|
66
|
+
#
|
|
67
|
+
# When setting a variable with no slash prefix, the target will always be the
|
|
68
|
+
# most local scope. When one wants to purposely override/overwrite an already
|
|
69
|
+
# set variable, the attribute :override can be set to true.
|
|
70
|
+
#
|
|
71
|
+
# In this example, although the second 'set' happens in its own scope, the
|
|
72
|
+
# variable v0, will be set to 'b' in the initial (top) scope:
|
|
73
|
+
#
|
|
74
|
+
# pdef = Ruote.define do
|
|
75
|
+
# set 'v:v0' => 'a'
|
|
76
|
+
# sequence :scope => true do
|
|
77
|
+
# set 'v:v0' => 'b', :over => true
|
|
78
|
+
# end
|
|
79
|
+
# end
|
|
80
|
+
#
|
|
81
|
+
# :over(ride) tells the 'set' expression to locate where the var is set
|
|
82
|
+
# and change the value there.
|
|
83
|
+
#
|
|
84
|
+
# :over is ignored for process (/) and engine (//) variables. It has no
|
|
85
|
+
# meaning for workitem fields.
|
|
86
|
+
#
|
|
87
|
+
# When :over is set to 'sub' (or :sub), the :over => true behaviour is
|
|
88
|
+
# followed, but it doesn't cross into the parent subprocess.
|
|
89
|
+
#
|
|
61
90
|
# == ruote 2.0's shorter form
|
|
62
91
|
#
|
|
63
92
|
# Ruote 2.0 introduces a shorter form for the 'set' expression :
|
|
@@ -85,6 +114,29 @@ module Ruote::Exp
|
|
|
85
114
|
# set 'f_${v:v}' => 'val2'
|
|
86
115
|
# end
|
|
87
116
|
#
|
|
117
|
+
# === shorter form and non-string values
|
|
118
|
+
#
|
|
119
|
+
# Dollar substitutions like '${a}' will always squash the field or the
|
|
120
|
+
# variable into a string. It's useful, especially when one is doing
|
|
121
|
+
# 'user-${name}', but when the field (or variable) is an array or an hash
|
|
122
|
+
#
|
|
123
|
+
# set 'f' => '${array}'
|
|
124
|
+
#
|
|
125
|
+
# will put the string representation of array into the field 'f', not
|
|
126
|
+
# a copy of the array itself.
|
|
127
|
+
#
|
|
128
|
+
# This will copy the array into the field 'f':
|
|
129
|
+
#
|
|
130
|
+
# set 'f' => '$f:array'
|
|
131
|
+
#
|
|
132
|
+
# Note the mandatory 'f:'. There is a thing to be aware of: if the field
|
|
133
|
+
# array is missing, it will resolve into "$f:array" (no substitution at all).
|
|
134
|
+
#
|
|
135
|
+
# There is always the old-style fallback:
|
|
136
|
+
#
|
|
137
|
+
# set :field => 'f', :field_value => 'array'
|
|
138
|
+
#
|
|
139
|
+
#
|
|
88
140
|
# == set and rset
|
|
89
141
|
#
|
|
90
142
|
# Some gems (Sinatra) for example may provide a set method that hides calls
|
|
@@ -94,75 +146,126 @@ module Ruote::Exp
|
|
|
94
146
|
#
|
|
95
147
|
# rset 'customer' => 'Jeff'
|
|
96
148
|
#
|
|
97
|
-
|
|
149
|
+
#
|
|
150
|
+
# == unset
|
|
151
|
+
#
|
|
152
|
+
# 'unset' is the counterpart to 'set', it removes a field (or a variable)
|
|
153
|
+
#
|
|
154
|
+
# unset :field => 'customer_name'
|
|
155
|
+
# unset :f => 'customer_name'
|
|
156
|
+
# unset :variable => 'vx'
|
|
157
|
+
# unset :var => 'vx'
|
|
158
|
+
# unset :v => 'vx'
|
|
159
|
+
#
|
|
160
|
+
# or simply
|
|
161
|
+
#
|
|
162
|
+
# unset 'f:customer_name'
|
|
163
|
+
# unset 'customer_name' # yes, it's field by default
|
|
164
|
+
# unset 'v:vx'
|
|
165
|
+
#
|
|
166
|
+
#
|
|
167
|
+
# == using set with a block
|
|
168
|
+
#
|
|
169
|
+
# (not a very common usage, introduced by ruote 2.3.0)
|
|
170
|
+
#
|
|
171
|
+
# 'set' can be used with a block. It then behaves like a 'sequence' and
|
|
172
|
+
# picks its value in the workitem field named '__result__'.
|
|
173
|
+
#
|
|
174
|
+
# set 'customer_name' do
|
|
175
|
+
# participant 'alice'
|
|
176
|
+
# participant 'bob'
|
|
177
|
+
# end
|
|
178
|
+
#
|
|
179
|
+
# Here, alice or bob may set the field '__result__' to some value,
|
|
180
|
+
# that will get picked as the value of the field 'customer_name'.
|
|
181
|
+
#
|
|
182
|
+
# Note that inside the set, a blank variable scope will be used (like in
|
|
183
|
+
# a 'let).
|
|
184
|
+
#
|
|
185
|
+
#
|
|
186
|
+
# == __result__
|
|
187
|
+
#
|
|
188
|
+
# 'set' and 'unset' place the [un]set value in the field named __result__.
|
|
189
|
+
#
|
|
190
|
+
# sequence do
|
|
191
|
+
# set 'f0' => 2
|
|
192
|
+
# participant 'x${__result__}''
|
|
193
|
+
# end
|
|
194
|
+
#
|
|
195
|
+
# will route a workitem to the participant named 'x2'.
|
|
196
|
+
#
|
|
197
|
+
class SetExpression < SequenceExpression
|
|
98
198
|
|
|
99
199
|
names :rset, :set, :unset
|
|
100
200
|
|
|
101
201
|
def apply
|
|
102
202
|
|
|
103
|
-
|
|
203
|
+
h.variables ||= {} # ensures a local scope
|
|
104
204
|
|
|
105
|
-
|
|
106
|
-
|
|
205
|
+
reply(h.applied_workitem)
|
|
206
|
+
end
|
|
107
207
|
|
|
108
|
-
|
|
208
|
+
def reply_to_parent(workitem)
|
|
109
209
|
|
|
110
|
-
|
|
210
|
+
h.applied_workitem['fields'] = workitem['fields']
|
|
211
|
+
# since set_vf and co work on h.applied_workitem...
|
|
111
212
|
|
|
112
|
-
|
|
213
|
+
opts = { :escape => attribute(:escape) }
|
|
214
|
+
compiled_atts = compile_atts(opts)
|
|
113
215
|
|
|
114
|
-
|
|
216
|
+
kv = find_kv(compiled_atts)
|
|
115
217
|
|
|
116
|
-
|
|
218
|
+
over = attribute(:override) || attribute(:over)
|
|
219
|
+
unset = name == 'unset'
|
|
117
220
|
|
|
118
|
-
|
|
221
|
+
h.variables = nil
|
|
222
|
+
# the local scope is over,
|
|
223
|
+
# variables set here will be set in the parent scope
|
|
119
224
|
|
|
225
|
+
value = if tree_children.empty?
|
|
226
|
+
lookup_val(opts)
|
|
120
227
|
else
|
|
121
|
-
|
|
122
|
-
raise ArgumentError.new(
|
|
123
|
-
"missing a variable or field target in #{tree.inspect}")
|
|
228
|
+
h.applied_workitem['fields']['__result__']
|
|
124
229
|
end
|
|
230
|
+
#
|
|
231
|
+
# a nil value is totally OK
|
|
125
232
|
|
|
126
|
-
|
|
127
|
-
end
|
|
233
|
+
result = if var_key = has_attribute(:v, :var, :variable)
|
|
128
234
|
|
|
129
|
-
|
|
235
|
+
set_v(attribute(var_key), value, :unset => unset, :override => over)
|
|
130
236
|
|
|
131
|
-
|
|
132
|
-
end
|
|
237
|
+
elsif field_key = has_attribute(:f, :fld, :field)
|
|
133
238
|
|
|
134
|
-
|
|
239
|
+
set_f(attribute(field_key), value, :unset => unset)
|
|
135
240
|
|
|
136
|
-
|
|
241
|
+
elsif value == nil && kv
|
|
137
242
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
end
|
|
243
|
+
kv << { :unset => unset, :override => over }
|
|
244
|
+
|
|
245
|
+
set_vf(*kv)
|
|
246
|
+
|
|
247
|
+
elsif kv
|
|
144
248
|
|
|
145
|
-
|
|
249
|
+
set_vf(kv.first, value, :unset => unset, :override => over)
|
|
146
250
|
|
|
147
|
-
if name == 'unset'
|
|
148
|
-
h.applied_workitem['fields'].delete(key)
|
|
149
251
|
else
|
|
150
|
-
|
|
252
|
+
|
|
253
|
+
raise ArgumentError.new(
|
|
254
|
+
"missing a variable or field target in #{tree.inspect}")
|
|
151
255
|
end
|
|
152
|
-
end
|
|
153
256
|
|
|
154
|
-
|
|
257
|
+
h.applied_workitem['fields']['__result__'] = result
|
|
155
258
|
|
|
156
|
-
|
|
259
|
+
super(h.applied_workitem)
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
protected
|
|
157
263
|
|
|
158
|
-
|
|
264
|
+
def find_kv(atts)
|
|
159
265
|
|
|
160
|
-
|
|
161
|
-
field = m[1][0, 1] == 'f'
|
|
162
|
-
key = m[2]
|
|
163
|
-
end
|
|
266
|
+
forbidden = COMMON_ATT_KEYS + %w[ escape over override ]
|
|
164
267
|
|
|
165
|
-
|
|
268
|
+
atts.find { |k, v| ! forbidden.include?(k) }
|
|
166
269
|
end
|
|
167
270
|
end
|
|
168
271
|
end
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#--
|
|
2
|
-
# Copyright (c) 2005-
|
|
2
|
+
# Copyright (c) 2005-2012, John Mettraux, jmettraux@gmail.com
|
|
3
3
|
#
|
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
5
|
# of this software and associated documentation files (the "Software"), to deal
|
|
@@ -22,53 +22,22 @@
|
|
|
22
22
|
# Made in Japan.
|
|
23
23
|
#++
|
|
24
24
|
|
|
25
|
-
require 'ruote/exp/fe_sequence'
|
|
26
|
-
|
|
27
25
|
|
|
28
26
|
module Ruote::Exp
|
|
29
27
|
|
|
30
28
|
#
|
|
31
|
-
#
|
|
32
|
-
#
|
|
33
|
-
#
|
|
34
|
-
# pdef = Ruote.process_definition do
|
|
35
|
-
# set 'v:var' => 'val'
|
|
36
|
-
# echo "out:${v:var}"
|
|
37
|
-
# let do
|
|
38
|
-
# set 'v:var' => 'val1'
|
|
39
|
-
# echo "in:${v:var}"
|
|
40
|
-
# end
|
|
41
|
-
# echo "out:${v:var}"
|
|
42
|
-
# end
|
|
43
|
-
#
|
|
44
|
-
# # => out:val, in:val1, out:val
|
|
45
|
-
#
|
|
29
|
+
# Stalls the [current branch of the] process. Does it by simply getting
|
|
30
|
+
# applied and not replying.
|
|
46
31
|
#
|
|
47
|
-
#
|
|
32
|
+
# Mostly used for tests.
|
|
48
33
|
#
|
|
49
|
-
|
|
50
|
-
# define 'published' do
|
|
51
|
-
# do_this
|
|
52
|
-
# end
|
|
53
|
-
# define 'reviewed' do
|
|
54
|
-
# do_that
|
|
55
|
-
# end
|
|
56
|
-
# subprocess '${case}'
|
|
57
|
-
# end
|
|
58
|
-
#
|
|
59
|
-
# Subprocesses 'published' and 'reviewed' are bound in a local scope,
|
|
60
|
-
# that gets discarded when the let exits.
|
|
61
|
-
#
|
|
62
|
-
class LetExpression < SequenceExpression
|
|
34
|
+
class StallExpression < FlowExpression
|
|
63
35
|
|
|
64
|
-
names :
|
|
36
|
+
names :stall
|
|
65
37
|
|
|
66
38
|
def apply
|
|
67
39
|
|
|
68
|
-
|
|
69
|
-
# the blank local scope
|
|
70
|
-
|
|
71
|
-
reply(h.applied_workitem)
|
|
40
|
+
# do nothing, stall the [current branch of the] process.
|
|
72
41
|
end
|
|
73
42
|
end
|
|
74
43
|
end
|