ruote-maestrodev 2.2.1
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 +290 -0
- data/CREDITS.txt +99 -0
- data/LICENSE.txt +21 -0
- data/README.rdoc +88 -0
- data/Rakefile +108 -0
- data/TODO.txt +488 -0
- data/lib/ruote.rb +7 -0
- data/lib/ruote/context.rb +194 -0
- data/lib/ruote/engine.rb +1062 -0
- data/lib/ruote/engine/process_error.rb +122 -0
- data/lib/ruote/engine/process_status.rb +448 -0
- data/lib/ruote/exp/command.rb +87 -0
- data/lib/ruote/exp/commanded.rb +69 -0
- data/lib/ruote/exp/condition.rb +227 -0
- data/lib/ruote/exp/fe_add_branches.rb +138 -0
- data/lib/ruote/exp/fe_apply.rb +154 -0
- data/lib/ruote/exp/fe_cancel_process.rb +78 -0
- data/lib/ruote/exp/fe_command.rb +156 -0
- data/lib/ruote/exp/fe_concurrence.rb +321 -0
- data/lib/ruote/exp/fe_concurrent_iterator.rb +219 -0
- data/lib/ruote/exp/fe_cron.rb +141 -0
- data/lib/ruote/exp/fe_cursor.rb +324 -0
- data/lib/ruote/exp/fe_define.rb +112 -0
- data/lib/ruote/exp/fe_echo.rb +60 -0
- data/lib/ruote/exp/fe_equals.rb +115 -0
- data/lib/ruote/exp/fe_error.rb +82 -0
- data/lib/ruote/exp/fe_filter.rb +648 -0
- data/lib/ruote/exp/fe_forget.rb +88 -0
- data/lib/ruote/exp/fe_given.rb +154 -0
- data/lib/ruote/exp/fe_if.rb +127 -0
- data/lib/ruote/exp/fe_inc.rb +205 -0
- data/lib/ruote/exp/fe_iterator.rb +234 -0
- data/lib/ruote/exp/fe_let.rb +75 -0
- data/lib/ruote/exp/fe_listen.rb +304 -0
- data/lib/ruote/exp/fe_lose.rb +110 -0
- data/lib/ruote/exp/fe_noop.rb +45 -0
- data/lib/ruote/exp/fe_once.rb +215 -0
- data/lib/ruote/exp/fe_participant.rb +287 -0
- data/lib/ruote/exp/fe_read.rb +69 -0
- data/lib/ruote/exp/fe_redo.rb +82 -0
- data/lib/ruote/exp/fe_ref.rb +152 -0
- data/lib/ruote/exp/fe_registerp.rb +110 -0
- data/lib/ruote/exp/fe_reserve.rb +126 -0
- data/lib/ruote/exp/fe_restore.rb +102 -0
- data/lib/ruote/exp/fe_save.rb +72 -0
- data/lib/ruote/exp/fe_sequence.rb +59 -0
- data/lib/ruote/exp/fe_set.rb +154 -0
- data/lib/ruote/exp/fe_subprocess.rb +211 -0
- data/lib/ruote/exp/fe_that.rb +92 -0
- data/lib/ruote/exp/fe_undo.rb +67 -0
- data/lib/ruote/exp/fe_unregisterp.rb +69 -0
- data/lib/ruote/exp/fe_wait.rb +95 -0
- data/lib/ruote/exp/flowexpression.rb +886 -0
- data/lib/ruote/exp/iterator.rb +81 -0
- data/lib/ruote/exp/merge.rb +118 -0
- data/lib/ruote/exp/ro_attributes.rb +212 -0
- data/lib/ruote/exp/ro_filters.rb +136 -0
- data/lib/ruote/exp/ro_persist.rb +154 -0
- data/lib/ruote/exp/ro_variables.rb +189 -0
- data/lib/ruote/exp/ro_vf.rb +68 -0
- data/lib/ruote/fei.rb +260 -0
- data/lib/ruote/id/mnemo_wfid_generator.rb +43 -0
- data/lib/ruote/id/wfid_generator.rb +81 -0
- data/lib/ruote/log/default_history.rb +122 -0
- data/lib/ruote/log/pretty.rb +176 -0
- data/lib/ruote/log/storage_history.rb +159 -0
- data/lib/ruote/log/test_logger.rb +208 -0
- data/lib/ruote/log/wait_logger.rb +64 -0
- data/lib/ruote/part/block_participant.rb +137 -0
- data/lib/ruote/part/code_participant.rb +81 -0
- data/lib/ruote/part/engine_participant.rb +189 -0
- data/lib/ruote/part/local_participant.rb +138 -0
- data/lib/ruote/part/no_op_participant.rb +60 -0
- data/lib/ruote/part/null_participant.rb +54 -0
- data/lib/ruote/part/rev_participant.rb +169 -0
- data/lib/ruote/part/smtp_participant.rb +116 -0
- data/lib/ruote/part/storage_participant.rb +392 -0
- data/lib/ruote/part/template.rb +84 -0
- data/lib/ruote/participant.rb +7 -0
- data/lib/ruote/reader.rb +278 -0
- data/lib/ruote/reader/json.rb +49 -0
- data/lib/ruote/reader/radial.rb +290 -0
- data/lib/ruote/reader/ruby_dsl.rb +186 -0
- data/lib/ruote/reader/xml.rb +99 -0
- data/lib/ruote/receiver/base.rb +212 -0
- data/lib/ruote/storage/base.rb +364 -0
- data/lib/ruote/storage/composite_storage.rb +121 -0
- data/lib/ruote/storage/fs_storage.rb +139 -0
- data/lib/ruote/storage/hash_storage.rb +211 -0
- data/lib/ruote/svc/dispatch_pool.rb +158 -0
- data/lib/ruote/svc/dollar_sub.rb +298 -0
- data/lib/ruote/svc/error_handler.rb +138 -0
- data/lib/ruote/svc/expression_map.rb +97 -0
- data/lib/ruote/svc/participant_list.rb +397 -0
- data/lib/ruote/svc/tracker.rb +172 -0
- data/lib/ruote/svc/treechecker.rb +141 -0
- data/lib/ruote/tree_dot.rb +85 -0
- data/lib/ruote/util/filter.rb +525 -0
- data/lib/ruote/util/hashdot.rb +79 -0
- data/lib/ruote/util/look.rb +128 -0
- data/lib/ruote/util/lookup.rb +127 -0
- data/lib/ruote/util/misc.rb +167 -0
- data/lib/ruote/util/ometa.rb +71 -0
- data/lib/ruote/util/serializer.rb +103 -0
- data/lib/ruote/util/subprocess.rb +88 -0
- data/lib/ruote/util/time.rb +100 -0
- data/lib/ruote/util/tree.rb +58 -0
- data/lib/ruote/version.rb +29 -0
- data/lib/ruote/worker.rb +386 -0
- data/lib/ruote/workitem.rb +394 -0
- data/phil.txt +14 -0
- data/ruote.gemspec +44 -0
- data/test/bm/ci.rb +55 -0
- data/test/bm/ici.rb +71 -0
- data/test/bm/juuman.rb +54 -0
- data/test/bm/launch_bench.rb +37 -0
- data/test/bm/load_26c.rb +97 -0
- data/test/bm/mega.rb +64 -0
- data/test/bm/seq_thousand.rb +31 -0
- data/test/bm/t.rb +35 -0
- data/test/functional/base.rb +247 -0
- data/test/functional/concurrent_base.rb +98 -0
- data/test/functional/crunner.rb +31 -0
- data/test/functional/ct_0_concurrence.rb +65 -0
- data/test/functional/ct_1_iterator.rb +67 -0
- data/test/functional/ct_2_cancel.rb +81 -0
- data/test/functional/eft_0_process_definition.rb +65 -0
- data/test/functional/eft_10_cancel_process.rb +46 -0
- data/test/functional/eft_11_wait.rb +109 -0
- data/test/functional/eft_12_listen.rb +500 -0
- data/test/functional/eft_13_iterator.rb +342 -0
- data/test/functional/eft_14_cursor.rb +456 -0
- data/test/functional/eft_15_loop.rb +69 -0
- data/test/functional/eft_16_if.rb +183 -0
- data/test/functional/eft_17_equals.rb +55 -0
- data/test/functional/eft_18_concurrent_iterator.rb +410 -0
- data/test/functional/eft_19_reserve.rb +136 -0
- data/test/functional/eft_1_echo.rb +68 -0
- data/test/functional/eft_20_save.rb +116 -0
- data/test/functional/eft_21_restore.rb +61 -0
- data/test/functional/eft_22_noop.rb +28 -0
- data/test/functional/eft_23_apply.rb +168 -0
- data/test/functional/eft_24_add_branches.rb +98 -0
- data/test/functional/eft_25_command.rb +28 -0
- data/test/functional/eft_26_error.rb +77 -0
- data/test/functional/eft_27_inc.rb +280 -0
- data/test/functional/eft_28_once.rb +135 -0
- data/test/functional/eft_29_cron.rb +64 -0
- data/test/functional/eft_2_sequence.rb +58 -0
- data/test/functional/eft_30_ref.rb +155 -0
- data/test/functional/eft_31_registerp.rb +130 -0
- data/test/functional/eft_32_lose.rb +93 -0
- data/test/functional/eft_33_let.rb +31 -0
- data/test/functional/eft_34_given.rb +123 -0
- data/test/functional/eft_35_filter.rb +375 -0
- data/test/functional/eft_36_read.rb +95 -0
- data/test/functional/eft_3_participant.rb +149 -0
- data/test/functional/eft_4_set.rb +296 -0
- data/test/functional/eft_5_subprocess.rb +163 -0
- data/test/functional/eft_6_concurrence.rb +304 -0
- data/test/functional/eft_7_forget.rb +61 -0
- data/test/functional/eft_8_undo.rb +114 -0
- data/test/functional/eft_9_redo.rb +138 -0
- data/test/functional/ft_0_worker.rb +65 -0
- data/test/functional/ft_10_dollar.rb +304 -0
- data/test/functional/ft_11_recursion.rb +109 -0
- data/test/functional/ft_12_launchitem.rb +43 -0
- data/test/functional/ft_13_variables.rb +151 -0
- data/test/functional/ft_14_re_apply.rb +324 -0
- data/test/functional/ft_15_timeout.rb +226 -0
- data/test/functional/ft_16_participant_params.rb +98 -0
- data/test/functional/ft_17_conditional.rb +102 -0
- data/test/functional/ft_18_kill.rb +138 -0
- data/test/functional/ft_19_participant_code.rb +67 -0
- data/test/functional/ft_1_process_status.rb +796 -0
- data/test/functional/ft_20_storage_participant.rb +543 -0
- data/test/functional/ft_21_forget.rb +153 -0
- data/test/functional/ft_22_process_definitions.rb +90 -0
- data/test/functional/ft_23_load_defs.rb +79 -0
- data/test/functional/ft_24_block_participant.rb +235 -0
- data/test/functional/ft_25_receiver.rb +207 -0
- data/test/functional/ft_26_participant_rtimeout.rb +179 -0
- data/test/functional/ft_27_var_indirection.rb +128 -0
- data/test/functional/ft_28_null_noop_participants.rb +51 -0
- data/test/functional/ft_29_part_template.rb +60 -0
- data/test/functional/ft_2_errors.rb +380 -0
- data/test/functional/ft_30_smtp_participant.rb +122 -0
- data/test/functional/ft_31_part_blocking.rb +72 -0
- data/test/functional/ft_33_participant_subprocess_priority.rb +32 -0
- data/test/functional/ft_34_cursor_rewind.rb +101 -0
- data/test/functional/ft_35_add_service.rb +56 -0
- data/test/functional/ft_36_storage_history.rb +150 -0
- data/test/functional/ft_37_default_history.rb +109 -0
- data/test/functional/ft_38_participant_more.rb +193 -0
- data/test/functional/ft_39_wait_for.rb +136 -0
- data/test/functional/ft_3_participant_registration.rb +574 -0
- data/test/functional/ft_40_wait_logger.rb +62 -0
- data/test/functional/ft_41_participants.rb +91 -0
- data/test/functional/ft_42_storage_copy.rb +71 -0
- data/test/functional/ft_43_participant_on_reply.rb +87 -0
- data/test/functional/ft_44_var_participant.rb +35 -0
- data/test/functional/ft_45_participant_accept.rb +64 -0
- data/test/functional/ft_46_launch_single.rb +83 -0
- data/test/functional/ft_47_wfid_generator.rb +54 -0
- data/test/functional/ft_48_lose.rb +112 -0
- data/test/functional/ft_49_engine_on_error.rb +201 -0
- data/test/functional/ft_4_cancel.rb +132 -0
- data/test/functional/ft_50_engine_config.rb +22 -0
- data/test/functional/ft_51_misc.rb +67 -0
- data/test/functional/ft_52_case.rb +134 -0
- data/test/functional/ft_53_engine_on_terminate.rb +95 -0
- data/test/functional/ft_54_patterns.rb +104 -0
- data/test/functional/ft_55_engine_participant.rb +303 -0
- data/test/functional/ft_56_filter_attribute.rb +259 -0
- data/test/functional/ft_57_rev_participant.rb +252 -0
- data/test/functional/ft_58_workitem.rb +69 -0
- data/test/functional/ft_59_pause.rb +343 -0
- data/test/functional/ft_5_on_error.rb +384 -0
- data/test/functional/ft_60_code_participant.rb +45 -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_6_on_cancel.rb +221 -0
- data/test/functional/ft_7_tags.rb +177 -0
- data/test/functional/ft_8_participant_consumption.rb +124 -0
- data/test/functional/ft_9_subprocesses.rb +146 -0
- data/test/functional/restart_base.rb +34 -0
- data/test/functional/rt_0_wait.rb +55 -0
- data/test/functional/rt_1_listen.rb +56 -0
- data/test/functional/rt_2_errors.rb +56 -0
- data/test/functional/rt_3_once.rb +70 -0
- data/test/functional/rt_4_cron.rb +64 -0
- data/test/functional/rt_5_timeout.rb +60 -0
- data/test/functional/rtest.rb +8 -0
- data/test/functional/storage_helper.rb +93 -0
- data/test/functional/test.rb +44 -0
- data/test/functional/vertical.rb +46 -0
- data/test/path_helper.rb +15 -0
- data/test/test.rb +13 -0
- data/test/test_helper.rb +28 -0
- data/test/unit/storage.rb +428 -0
- data/test/unit/storages.rb +37 -0
- data/test/unit/test.rb +28 -0
- data/test/unit/ut_0_ruby_reader.rb +223 -0
- data/test/unit/ut_11_lookup.rb +122 -0
- data/test/unit/ut_13_serializer.rb +65 -0
- data/test/unit/ut_14_is_uri.rb +28 -0
- data/test/unit/ut_15_util.rb +57 -0
- data/test/unit/ut_16_reader.rb +225 -0
- data/test/unit/ut_18_engine.rb +47 -0
- data/test/unit/ut_19_part_template.rb +86 -0
- data/test/unit/ut_1_fei.rb +165 -0
- data/test/unit/ut_20_composite_storage.rb +74 -0
- data/test/unit/ut_21_svc_participant_list.rb +46 -0
- data/test/unit/ut_22_filter.rb +1094 -0
- data/test/unit/ut_23_svc_tracker.rb +48 -0
- data/test/unit/ut_24_radial_reader.rb +332 -0
- data/test/unit/ut_25_merge.rb +113 -0
- data/test/unit/ut_3_wait_logger.rb +39 -0
- data/test/unit/ut_4_expmap.rb +20 -0
- data/test/unit/ut_5_tree.rb +54 -0
- data/test/unit/ut_6_condition.rb +303 -0
- data/test/unit/ut_7_workitem.rb +99 -0
- data/test/unit/ut_8_tree_to_dot.rb +72 -0
- data/test/unit/ut_9_xml_reader.rb +61 -0
- metadata +504 -0
data/CHANGELOG.txt
ADDED
@@ -0,0 +1,290 @@
|
|
1
|
+
|
2
|
+
= ruote - CHANGELOG.txt
|
3
|
+
|
4
|
+
|
5
|
+
== ruote - 2.2.1 not yet released
|
6
|
+
|
7
|
+
- dollar substitution in expression name as well
|
8
|
+
- Engine#replay_at_error(err_or_fei_or_wi)
|
9
|
+
- Engine#error(wi_or_fei)
|
10
|
+
- storages : #replace_engine_configuration(opts)
|
11
|
+
- FsStorage : saving newer configuration (Thanks Nicholas Faiz)
|
12
|
+
- ProcessStatus context : linking expression <-> error
|
13
|
+
- ProcessStatus#root_workitem
|
14
|
+
- ProcessStatus#leaves
|
15
|
+
- filter 'includes' and 'is' (Thanks Nando Sola)
|
16
|
+
- trailing fields (a Simone Carletti idea)
|
17
|
+
- concurrence vs history issue fixed (Thanks Juris Galang)
|
18
|
+
- unset and fields : made sure the field is removed (Thanks jpgilman)
|
19
|
+
- sourcify, using to_raw_source from now on
|
20
|
+
- filter expression and blocks
|
21
|
+
- set 'v:display' => 'echo', aliasing of expressions
|
22
|
+
- Reader.read(s) : better error raised when failed to 'parse'
|
23
|
+
- :on_field => 'my.nested.field' now possible
|
24
|
+
- [concurrent-]iterator :to => 'v:x' / 'f:y' / 'y'
|
25
|
+
- concurrence :merge_type => 'union'
|
26
|
+
- Reader.to_radial(tree)
|
27
|
+
- Workitem#param_or_field(key) and #field_or_param(key)
|
28
|
+
- Workitem#param_text
|
29
|
+
- ProcessError#deviations (cf filter and Ruote::ValidationError)
|
30
|
+
- reworked (process definition) Reader
|
31
|
+
- filter top-level 'or'
|
32
|
+
- filter field => 'x|y' (or on field names)
|
33
|
+
- 'radial' process definitions
|
34
|
+
- fixed Tracker#add_tracker (2nd try) issue (Thanks Pedro Texeira)
|
35
|
+
- Engine#register :on_workitem / :on_reply / ...
|
36
|
+
- set 'v:participant' => lambda { |wi| wi.fields['x'] = 'y' }
|
37
|
+
- listen :to => :errors, :class => string / :message/:msg => string / regex
|
38
|
+
- listen :to => :errors
|
39
|
+
- dropped require 'json' and co from fs_storage (Thanks Torsten)
|
40
|
+
- cursor : 'reset' command and :reset_if attribute
|
41
|
+
- Engine#resume(wfid, :anyway => true) resumes any paused expression in a
|
42
|
+
given process
|
43
|
+
- Engine#pause(fei, :breakpoint => true) pauses only one expression (and not
|
44
|
+
its children)
|
45
|
+
- CompositeStorage#delete_schedule fix (Thanks Greg)
|
46
|
+
- read 'http://'|'file', :to => 'f:a' / :to => 'v:b'
|
47
|
+
- save :to => 'f:a' / :to => 'v:b'
|
48
|
+
- pause(fei/wfid), resume(fei/wfid)
|
49
|
+
- participant list, multiple participants with same regex now ok, allowing
|
50
|
+
for cascading participants (at consume and at on_error)
|
51
|
+
- register block : fixed issue with lonely pname and block
|
52
|
+
- register_participant : after/before/over
|
53
|
+
- register block : now clearing by default
|
54
|
+
- fixed issue with deep set and unset (Thanks Nando Sola)
|
55
|
+
- improved conditional evaluation for dollar notation
|
56
|
+
- register block : catchall and catch_all
|
57
|
+
- Workitem #wf_name and #wf_revision
|
58
|
+
- StorageParticipant :skip and :limit issues (Thanks Jan Topiński)
|
59
|
+
- StorageParticipant #proceed deprecates #reply
|
60
|
+
- fix for :if => '${a}' when a like '456ab' (Thanks John Le)
|
61
|
+
- StorageParticipant :count => true uniformization (Thanks Jan Topiński)
|
62
|
+
- StorageParticipant#by_fei (alias for #[])
|
63
|
+
|
64
|
+
|
65
|
+
== ruote - 2.2.0 released 2011/03/01
|
66
|
+
|
67
|
+
- Engine#participant(name) returns an instance of any participant
|
68
|
+
- :filter => 'participant_name' (consume(wi) / filter(fields))
|
69
|
+
- listen block and forget issue fixed (Thanks Nando Sola)
|
70
|
+
- @msg always set in FlowExpression
|
71
|
+
- aliased 'cancel_process' to 'terminate'
|
72
|
+
- Engine#leftovers (Thanks Iuri)
|
73
|
+
- $x, $f:x and $v:y vs ${x}, ${f:x} and ${v:y} (literally)
|
74
|
+
- :filter common attribute
|
75
|
+
- Participant#do_not_thread : optional workitem parameter
|
76
|
+
- filter expression
|
77
|
+
- LocalParticipant / Receiver #applied_workitem(fei)
|
78
|
+
- using Sourcify to store block participant's code as a string
|
79
|
+
- CompositeStorage#delete bug fix (Thanks Claudio)
|
80
|
+
- ParticipantList#register bug fix (Thanks 'sandbox')
|
81
|
+
- StorageHistory#wfids and DefaultHistory#wfids
|
82
|
+
- Engine#history -> DefaultHistory (keeping the last 1000 msgs)
|
83
|
+
- 'citerator' alias to 'concurrent_iterator'
|
84
|
+
- Participant#rtimeout(workitem) (optional)
|
85
|
+
- moved Engine#workitem(fei) to ReceiverMixin
|
86
|
+
- storage#delete_schedule ignoring nil schedule_id
|
87
|
+
- Participant #rtimeout instead of #timeout
|
88
|
+
- StorageParticipant making @options available
|
89
|
+
- Engine#register, allowing block participants (Thanks Hery)
|
90
|
+
- fixed Engine#launch_single relaunch issue (Thanks Gonzalo)
|
91
|
+
- 'rset', an alias for the 'set' expression (Thanks Rebo)
|
92
|
+
- listen :to => /x/ or "/x/" required for regular expressions
|
93
|
+
- engine#on_terminate = participant_name / subprocess_name / tree
|
94
|
+
- listen :to => 'tagname', :upon => 'entering' / 'leaving'
|
95
|
+
- Ruote::Parser becomes Ruote::Reader
|
96
|
+
- :if => "${customer} in ${customer_list}", :if => "4 in {4 => 5}"
|
97
|
+
- Ruote::Workitem .from_json #as_json
|
98
|
+
- :on_error => redo/retry // undo/pass
|
99
|
+
- given : a case/switch ruote equivalent
|
100
|
+
- conditionals : "${x} is empty" and "${x} is null"
|
101
|
+
- once expression (once, _when, as_soon_as)
|
102
|
+
- let expression (a sequence with its own variable scope)
|
103
|
+
- engine.ps(wfid=nil)
|
104
|
+
- once : made sure child is cancelled as well
|
105
|
+
- :if => '${f:a} and ${f:b}'
|
106
|
+
- workitem.tags (workitem['fields']['__tags__']
|
107
|
+
- better participant initialization (Thanks Neil Pennell)
|
108
|
+
- Engine #cancel and #kill (expression or process, whichever)
|
109
|
+
- subid (sub_wfid) for every expression
|
110
|
+
- undo and redo : more robust (broken tags)
|
111
|
+
- cursor : giving a sub_wfid to children (play nice with :forget)
|
112
|
+
- Ruote.is_tree?(o) .is_definition_tree?(o) consolidated
|
113
|
+
- engine#on_error = [] registering error notifications and the like
|
114
|
+
- engine#configuration(key) (counterpart to engine#configure(key, value))
|
115
|
+
- implemented the :lose attribute
|
116
|
+
- implemented the 'lose' expression
|
117
|
+
- fixed issue with "over" (Thanks Daniel 'hassox' Neighman)
|
118
|
+
- fixed issue with workitem.command = 'jump to x' (Thanks Fix Peña)
|
119
|
+
- fixed issue with ProcessStatus#position and errors in ParticipantExpression
|
120
|
+
(Thanks Eric Smith)
|
121
|
+
- 'registerp' and 'unregisterp' expressions
|
122
|
+
- ${r:xxx} when ruby_eval_allowed == false now raises an error
|
123
|
+
|
124
|
+
|
125
|
+
== ruote - 2.1.11 released 2010/10/01
|
126
|
+
|
127
|
+
- Engine#process broken with process where schedule count > 1 (Thanks David)
|
128
|
+
- Engine#launch_single for 1! instance processes (Thanks Eric)
|
129
|
+
- Workitem#command and #command= helpers
|
130
|
+
- ProcessError#workitem helper
|
131
|
+
- fetch_flow_expression made public and aliased to fexp
|
132
|
+
- ${r:workitem_field} (idea: Nathan Stults)
|
133
|
+
- Ruote::Dollar::Dict and Ruote::Dollar::RubyContext
|
134
|
+
- made Ruote.dsub a service : @context.dollar_sub.s(...) (idea: Nathan Stults)
|
135
|
+
- moved simpler services to ruote/svc/
|
136
|
+
- using BlankSlate for ruby process definitions
|
137
|
+
- Engine.new(worker, :join => true) will let the worker run in the current
|
138
|
+
thread (and not return)
|
139
|
+
- StorageParticipant#query(:count => true)
|
140
|
+
- storage.get_many(type, keys, :descending => true)
|
141
|
+
- engine.processes(:skip => 50, limit => 50)
|
142
|
+
- listen expression : using lwfid instead of wfid (storage change)
|
143
|
+
- fixed issue when re-applying root expressions (Thanks Brett)
|
144
|
+
- storage_participant.query using :skip and :limit
|
145
|
+
- engine.schedules([wfid]) and ProcessStatus#schedules
|
146
|
+
- differentiating on_re_apply from on_cancel (process gardening)
|
147
|
+
- engine.participant_list= more tolerant about its input
|
148
|
+
- engine.process(wfid).stored_workitems
|
149
|
+
- engine.process(wfid).workitems and .position
|
150
|
+
- engine.process(wfid).last_active
|
151
|
+
- engine.errors(wfid=nil) now returns array of ProcessError instances
|
152
|
+
- engine.register { block } (Torsten)
|
153
|
+
- participant.accept?(workitem)
|
154
|
+
- 'ref' expression (pointing to participants or subprocesses)
|
155
|
+
- engine.process_wfids (list process instance wfids)
|
156
|
+
- set 'v:alpha' => [ 'MyParticipant', { 'flavour' => 'vanilla' }]
|
157
|
+
participants registered as variables (just for that process instance)
|
158
|
+
- engine.participant_list and .participant_list=
|
159
|
+
- engine.register_participant 'al', 'AlParticipant', :require_path => 'pa/th'
|
160
|
+
- engine.register_participant 'al', 'AlParticipant', :load_path => 'pa/th'
|
161
|
+
- engine.[un]register for .[un]register_participant
|
162
|
+
- engine.noisy = true (a shortcut)
|
163
|
+
- engine.storage_participant (a shortcut)
|
164
|
+
- removed direct dependency on rufus-lru
|
165
|
+
- WaitLogger : a transient @seen (Thanks Kaspar)
|
166
|
+
- error_handler : more error catching
|
167
|
+
- storage#copy_to(other_storage) item by item implementation
|
168
|
+
- Engine#wait_for OK with multiple threads
|
169
|
+
- ExpressionMap now loads all expressions in Ruote::Exp:: namespace
|
170
|
+
- 'error_intercepted' msg now features error_class, _message and _backtrace (RM)
|
171
|
+
- Engine#join and Worker#join
|
172
|
+
- workitem.error now includes error's backtrace (contributed by Rich Meyers)
|
173
|
+
|
174
|
+
|
175
|
+
== ruote - 2.1.10 released 2010/06/15
|
176
|
+
|
177
|
+
- storage#copy_to(other_storage) implemented
|
178
|
+
- #launch moved from Engine to ReceiverMixin
|
179
|
+
- participants without initialize(opts) are now allowed
|
180
|
+
- engine.wait_for(:inactive)
|
181
|
+
- engine.wait_for(*interests) unlocked
|
182
|
+
- engine.wait_for(:empty)
|
183
|
+
- fixed issue with participant 'x' and :on_error. Thanks Oleg.
|
184
|
+
- receiver : reply and reply_to_engine : from aliases to wrappers
|
185
|
+
- Ruote::StorageParticipant more flexibility for method args
|
186
|
+
- Ruote::FlowExpressionId .extract_h and .extract
|
187
|
+
- dropped fs_history (storage_history is better)
|
188
|
+
- parser to_xml _if 'x == b' --> <if test="x == b">
|
189
|
+
- workitem.sid shortcut for workitem.fei.to_storage_id
|
190
|
+
- workitem.wfid shorcut for workitem.fei.wfid
|
191
|
+
- new error_handler service
|
192
|
+
- Receiver.new(x), x can be worker, engine, context or storage
|
193
|
+
- Participant#on_reply(workitem) manipulating workitems when they come back
|
194
|
+
- set '${v:customers.0.name}' => 'x' now OK, was limited to fields. Thanks Oleg
|
195
|
+
- LocalParticipant#put(fei, hash) #get(fei, key) for stashing info
|
196
|
+
- LocalParticipant#re_dispatch(wi, opts)
|
197
|
+
- bug in HashStorage, apply over apply didn't raise a persist error. Fixed.
|
198
|
+
- keeping track of workitem fields as they were right before a participant error
|
199
|
+
- Workitem.error holds the error when on_error. Thanks Oleg.
|
200
|
+
- Workitem#error and Workitem#timed_out shortcuts
|
201
|
+
- participant :on_error => 'x' broken. Fixed. Thanks Oleg.
|
202
|
+
- Engine#workitem(fei) for advanced users
|
203
|
+
- LocalParticipant : added a reject(workitem) method
|
204
|
+
- participant exp : dispatched = true set right after dispatch
|
205
|
+
|
206
|
+
|
207
|
+
== ruote - 2.1.9 released 2010/03/22
|
208
|
+
|
209
|
+
- made participant.cancel occur asynchronously (as should be)
|
210
|
+
- lookup_variable : making sure not to break when the parent exp is gone
|
211
|
+
- workitem.fields['__dispatch_time__'] is now set
|
212
|
+
|
213
|
+
|
214
|
+
== ruote - 2.1.8 released 2010/03/15
|
215
|
+
|
216
|
+
- participant#schedule_timeout workaround for issue with JRuby 1.4.0 (1.8.7)
|
217
|
+
- implemented Ruote::CompositeStorage
|
218
|
+
- leveraging rufus-cloche 0.1.16 and the 'cloche_nolock' option (FsStorage)
|
219
|
+
- SmtpParticipant and ruote/part/template.rb reorganization
|
220
|
+
- StorageParticipant when returned by engine#register was unusable. Fixed.
|
221
|
+
- string keys for SmtpParticipant. Thanks Gonzalo
|
222
|
+
- fixed every('10m') bug. Thanks Gonzalo Suarez
|
223
|
+
- Ruote::FlowExpressionId.from_id(s) more permissive
|
224
|
+
- concurrence (and concurrent-iterator) :merge_type => :stack
|
225
|
+
|
226
|
+
|
227
|
+
== ruote - 2.1.7 released 2010/02/15
|
228
|
+
|
229
|
+
- now works on WinXP, Ruby 1.8.7
|
230
|
+
- reformed msgs ids and adapted Ruote::StorageHistory
|
231
|
+
- engine.register_participant(x, Ruote::StorageParticipant) now returning
|
232
|
+
a instance of the participant, for easy query
|
233
|
+
- StorageParticipant, added #query(criteria), thanks Torsten and Brett
|
234
|
+
- Ruote::Workitem #lookup('deep.field') and #set_field('deep.field') are back
|
235
|
+
- Ruote::Workitem added == and hash (list.uniq friendly), thanks Brett
|
236
|
+
- Engine#configure(key, value), thanks Torsten
|
237
|
+
- Ruote.to_tree (lightweight version of Ruote.process_definition)
|
238
|
+
- ParticipantList#names, thanks Kenneth
|
239
|
+
|
240
|
+
|
241
|
+
== ruote - 2.1.6 released 2010/02/08
|
242
|
+
|
243
|
+
- welcoming ruote-dm (datamapper persistency)
|
244
|
+
- Engine#re_apply(fei, opts) where opts in [ :tree, :fields, :merge_in_fields ]
|
245
|
+
- fixed issue about StorageParticipant#update, thanks Torsten
|
246
|
+
|
247
|
+
|
248
|
+
== ruote - 2.1.5 released 2010/01/28
|
249
|
+
|
250
|
+
- fixed StorageParticipant a to b flow, fix by Torsten
|
251
|
+
- fixed StorageParticipant#cancel
|
252
|
+
- dollar : made sure of ${fei} and ${wfid}
|
253
|
+
- implemented ProcessStatus#to_dot
|
254
|
+
- if a participant implementation cancel method returns false,
|
255
|
+
reply_to_parent will not get called
|
256
|
+
- changes about errors without [stored] expressions, they now appear in process
|
257
|
+
statuses
|
258
|
+
- EngineParticipant implemented
|
259
|
+
- 'ruby_eval_allowed' instead of :ruby_eval_allowed
|
260
|
+
- ${v:customer.address.1} deep trick now ok (as it was ok for fields)
|
261
|
+
- added d() to the $ notation : echo "${r: d('f:toto') }"
|
262
|
+
- Engine#kill_process(wfid) can cure errored participant expressions
|
263
|
+
- made sure ${r:wi} and ${r:workitem} is and instance of Ruote::Workitem
|
264
|
+
- implemented StorageParticipant#by_field
|
265
|
+
|
266
|
+
|
267
|
+
== ruote - 2.1.4 released 2010/01/11
|
268
|
+
|
269
|
+
- implemented StorageHistory
|
270
|
+
- using yyyy-mm-dd instead of yyyy/mm/dd for Ruote.time_to_utc_s(t)
|
271
|
+
- implemented Storage#purge_type!(t)
|
272
|
+
- Engine#add_service now returning just bound service
|
273
|
+
|
274
|
+
|
275
|
+
== ruote - 2.1.3 released 2010/01/04
|
276
|
+
|
277
|
+
- fixed issue with Rufus.is_cron_string (thanks Torsten)
|
278
|
+
- fixed issue with FlowExpression#cancel (Kenneth)
|
279
|
+
|
280
|
+
|
281
|
+
== ruote - 2.1.2 released 2010/01/03
|
282
|
+
|
283
|
+
- fixed issue when initializing engine without worker. Thanks Matt Nichols.
|
284
|
+
|
285
|
+
|
286
|
+
== ruote - 2.1.1 released 2009/12/31
|
287
|
+
|
288
|
+
== OpenWFEru - 0.9.2 released 2007/01/26
|
289
|
+
== openwfe-ruby - 1.7.0 released 2006/05/08
|
290
|
+
|
data/CREDITS.txt
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
|
2
|
+
= CREDITS
|
3
|
+
|
4
|
+
Ruote is an open source Ruby workflow engine.
|
5
|
+
|
6
|
+
|
7
|
+
== The main project team
|
8
|
+
|
9
|
+
John Mettraux - http://jmettraux.wordpress.com
|
10
|
+
Torsten Schoenebaum - http://github.com/tosch
|
11
|
+
Kenneth Kalmer - http://www.opensourcery.co.za
|
12
|
+
|
13
|
+
|
14
|
+
== Contributors
|
15
|
+
|
16
|
+
Simone Carletti - documentation, bug hunting and various ideas
|
17
|
+
Raphael Simon - error handling + filters design
|
18
|
+
Nando Sola - lots of help
|
19
|
+
Neil Pennell - http://github.com/npennel
|
20
|
+
Patrick Gannon - fix for compatibility with ruote-mongodb
|
21
|
+
Fix Peña - 'jump to' bug patch
|
22
|
+
Eric Smith - position when error patch
|
23
|
+
David Goodlad - http://github.com/dgoodlad
|
24
|
+
Eric Dennis - http://github.com/threetee
|
25
|
+
David Greaves - http://github.com/lbt
|
26
|
+
Rich Meyers - http://github.com/richmeyers
|
27
|
+
Oleg Pudeyev - http://github.com/p
|
28
|
+
Brett Anthoine - http://github.com/anb
|
29
|
+
Matt Nichols - http://github.com/mattnichols
|
30
|
+
Nicholas Faiz - http://github.com/biv
|
31
|
+
Chris Beer - http://github.com/cbeer
|
32
|
+
Enrico Bianco - http://github.com/enricob
|
33
|
+
Andrew Timberlake - timeout 'at'
|
34
|
+
Maarten Oelering - bug reports and test cases
|
35
|
+
Nick Petrella - socket listener issues and Python interactivity, dollar patch
|
36
|
+
Sakaguchi Masa - japanese website and articles in Japanese magazines
|
37
|
+
Patrice Cappelaere - lots of feedback and ideas
|
38
|
+
Tomaso Tosolini - database persisted engine implementation and patches
|
39
|
+
Alain Hoang (configuration managaer)
|
40
|
+
Matt Zukowski (senior developer)
|
41
|
+
Jamandru Reynolds (http://geometron.net)
|
42
|
+
Frederic Piccand
|
43
|
+
Richard Jennings
|
44
|
+
|
45
|
+
|
46
|
+
== Feedback
|
47
|
+
|
48
|
+
Juris Galang - https://github.com/jurisgalang (concurrence vs history issue)
|
49
|
+
John 'jpgilman' - timed_out and name of the participant
|
50
|
+
Pedro Texeira - add_tracker issue
|
51
|
+
Greg Lazarev - composite storage issues
|
52
|
+
Jan Topiński - https://github.com/simcha
|
53
|
+
Iuri Gagnidze - ProcessStatus#definition_name issues, Engine#leftovers
|
54
|
+
John Le - https://github.com/sandbox
|
55
|
+
Sean Johnson - https://github.com/belucid
|
56
|
+
Hery - Engine#register and block participants
|
57
|
+
Gonzalo Suarez - many many help
|
58
|
+
Rebo - 'set' issue with Sinatra
|
59
|
+
Copper Hill - test coverage enhancements
|
60
|
+
Claudio Petasecca Donati - many help
|
61
|
+
Daniel Neighman "hassox" - :on_timeout => "error" and many issue reports
|
62
|
+
Eric Platon - engine.launch_single idea
|
63
|
+
Marc Lee - storage.clear consistency
|
64
|
+
Nathan Stults - enhanced dollar substitution and service
|
65
|
+
Don H. French - Engine#register_from_dir idea
|
66
|
+
Kaspar Schiess - http://github.com/kschiess
|
67
|
+
Oleg (foenixx) - many suggestions and bug reports
|
68
|
+
Avishai Shalom - discussion and ideas about participant/worker locality
|
69
|
+
Francisco Kiko - many help
|
70
|
+
David Goldhirsch - EM participant block
|
71
|
+
dlamotte - set :val => nil
|
72
|
+
jpr5 + asm
|
73
|
+
Jason Allen - multi-instance considerations
|
74
|
+
Petia Wohed - workflow patterns implementation evaluation
|
75
|
+
Ralph DeGuelle - sleep silent death report
|
76
|
+
Leo Venegas - various bug reports
|
77
|
+
Corin Moss - sync launch and ruote-rest balancing
|
78
|
+
Scott Sproule - missing read() method in rufus-verbs fopen()
|
79
|
+
Aye Thu - missing 'atom-tools' dependency
|
80
|
+
Machiel Groeneveld - missing 'rufus-mnemo' dependency
|
81
|
+
Harshal Hayat - :on_field => :executions idea
|
82
|
+
Ralf KaoticEntity - concurrence mix feedback
|
83
|
+
Graeme Lockley - every jobs {re/un}scheduling
|
84
|
+
JimJin - various feedback and bug reports
|
85
|
+
Andreas Baumann - bug reports and test cases
|
86
|
+
Fu Zhang - csv tables 'accumulate' and 'range' ideas
|
87
|
+
Lee Fyock - suggested the Scheduler 'tag' feature.
|
88
|
+
Art Schumer - cron scheduler bug
|
89
|
+
ara.t.howard on the ruby talk ml pointed out a weakness in scheduler.
|
90
|
+
Tomek "Tomash" Stachewicz - scheduler feedback
|
91
|
+
Jon "Compensator" - first report of the "yamlextras" issue
|
92
|
+
|
93
|
+
(see the mailing list at : http://groups.google.com/group/openwferu-users )
|
94
|
+
|
95
|
+
|
96
|
+
= Last but not least
|
97
|
+
|
98
|
+
Many thanks to the authors, the contributors and the community of the Ruby language, the various json gems, the builder, mailtrap, sourcify, parsetree, parslet gems, and many more.
|
99
|
+
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
|
2
|
+
Copyright (c) 2001-2011, John Mettraux, jmettraux@gmail.com
|
3
|
+
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
5
|
+
of this software and associated documentation files (the "Software"), to deal
|
6
|
+
in the Software without restriction, including without limitation the rights
|
7
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
copies of the Software, and to permit persons to whom the Software is
|
9
|
+
furnished to do so, subject to the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be included in
|
12
|
+
all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
20
|
+
THE SOFTWARE.
|
21
|
+
|
data/README.rdoc
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
|
2
|
+
= ruote
|
3
|
+
|
4
|
+
Ruote is a Ruby workflow engine. It's thus a workflow definition interpreter. If you're enterprisey, you might say business process definition.
|
5
|
+
|
6
|
+
Instances of these definitions are meant to run for a long time, so Ruote is oriented towards persistency / modifiability instead of transience / performance like a regular interpreter is. A Ruote engine may run multiple instances of workflow definitions.
|
7
|
+
|
8
|
+
Persistent mostly means that you can stop Ruote and later restart it without losing processes. Modifiability means that you can modify a workflow instance on the fly.
|
9
|
+
|
10
|
+
Process definitions are mainly describing how workitems are routed to participants. These participants may represent worklists for users or group of users, pieces of code, ...
|
11
|
+
|
12
|
+
|
13
|
+
== usage
|
14
|
+
|
15
|
+
grab ruote
|
16
|
+
|
17
|
+
gem install ruote
|
18
|
+
gem install yajl-ruby
|
19
|
+
|
20
|
+
Note : the json gem has a serious bug :
|
21
|
+
|
22
|
+
http://github.com/flori/json/issues#issue/21
|
23
|
+
|
24
|
+
So yajl-ruby is seriously recommended.
|
25
|
+
|
26
|
+
Then
|
27
|
+
|
28
|
+
require 'rubygems'
|
29
|
+
require 'ruote'
|
30
|
+
require 'ruote/storage/fs_storage'
|
31
|
+
|
32
|
+
# preparing the engine
|
33
|
+
|
34
|
+
engine = Ruote::Engine.new(
|
35
|
+
Ruote::Worker.new(
|
36
|
+
Ruote::FsStorage.new('ruote_work')))
|
37
|
+
|
38
|
+
# registering participants
|
39
|
+
|
40
|
+
engine.register_participant :alpha do |workitem|
|
41
|
+
workitem.fields['message'] = { 'text' => 'hello !', 'author' => 'Alice' }
|
42
|
+
end
|
43
|
+
|
44
|
+
engine.register_participant :bravo do |workitem|
|
45
|
+
puts "I received a message from #{workitem.fields['message']['author']}"
|
46
|
+
end
|
47
|
+
|
48
|
+
# defining a process
|
49
|
+
|
50
|
+
pdef = Ruote.process_definition :name => 'test' do
|
51
|
+
sequence do
|
52
|
+
participant :alpha
|
53
|
+
participant :bravo
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# launching, creating a process instance
|
58
|
+
|
59
|
+
wfid = engine.launch(pdef)
|
60
|
+
|
61
|
+
engine.wait_for(wfid)
|
62
|
+
# blocks current thread until our process instance terminates
|
63
|
+
|
64
|
+
# => 'I received a message from Alice'
|
65
|
+
|
66
|
+
|
67
|
+
== test suite
|
68
|
+
|
69
|
+
see http://github.com/jmettraux/ruote/tree/master/test
|
70
|
+
|
71
|
+
|
72
|
+
== license
|
73
|
+
|
74
|
+
MIT
|
75
|
+
|
76
|
+
|
77
|
+
== links
|
78
|
+
|
79
|
+
* http://ruote.rubyforge.org
|
80
|
+
* http://github.com/jmettraux/ruote
|
81
|
+
* http://jmettraux.wordpress.com (blog)
|
82
|
+
|
83
|
+
|
84
|
+
== feedback
|
85
|
+
|
86
|
+
* mailing list : http://groups.google.com/group/openwferu-users
|
87
|
+
* irc : irc.freenode.net #ruote
|
88
|
+
|