ruote 2.1.11 → 2.2.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.
Files changed (217) hide show
  1. data/CHANGELOG.txt +60 -0
  2. data/CREDITS.txt +22 -4
  3. data/LICENSE.txt +1 -1
  4. data/README.rdoc +6 -7
  5. data/Rakefile +58 -59
  6. data/TODO.txt +137 -65
  7. data/couch_url.txt +1 -0
  8. data/jruby_issue.txt +32 -0
  9. data/lib/ruote.rb +1 -1
  10. data/lib/ruote/context.rb +12 -10
  11. data/lib/ruote/engine.rb +280 -145
  12. data/lib/ruote/engine/process_error.rb +5 -5
  13. data/lib/ruote/engine/process_status.rb +47 -28
  14. data/lib/ruote/exp/command.rb +7 -10
  15. data/lib/ruote/exp/commanded.rb +2 -2
  16. data/lib/ruote/exp/condition.rb +130 -43
  17. data/lib/ruote/exp/fe_add_branches.rb +2 -2
  18. data/lib/ruote/exp/fe_apply.rb +1 -1
  19. data/lib/ruote/exp/fe_cancel_process.rb +3 -3
  20. data/lib/ruote/exp/fe_command.rb +3 -3
  21. data/lib/ruote/exp/fe_concurrence.rb +4 -4
  22. data/lib/ruote/exp/fe_concurrent_iterator.rb +17 -5
  23. data/lib/ruote/exp/fe_cron.rb +3 -3
  24. data/lib/ruote/exp/fe_cursor.rb +5 -5
  25. data/lib/ruote/exp/fe_define.rb +3 -3
  26. data/lib/ruote/exp/fe_echo.rb +3 -3
  27. data/lib/ruote/exp/fe_equals.rb +2 -2
  28. data/lib/ruote/exp/fe_error.rb +2 -2
  29. data/lib/ruote/exp/fe_filter.rb +519 -0
  30. data/lib/ruote/exp/fe_forget.rb +9 -2
  31. data/lib/ruote/exp/fe_given.rb +154 -0
  32. data/lib/ruote/exp/fe_if.rb +16 -13
  33. data/lib/ruote/exp/fe_inc.rb +3 -3
  34. data/lib/ruote/exp/fe_iterator.rb +4 -4
  35. data/lib/ruote/exp/fe_let.rb +75 -0
  36. data/lib/ruote/exp/fe_listen.rb +68 -12
  37. data/lib/ruote/exp/fe_lose.rb +110 -0
  38. data/lib/ruote/exp/fe_noop.rb +1 -1
  39. data/lib/ruote/exp/{fe_when.rb → fe_once.rb} +25 -21
  40. data/lib/ruote/exp/fe_participant.rb +14 -17
  41. data/lib/ruote/exp/fe_redo.rb +10 -6
  42. data/lib/ruote/exp/fe_ref.rb +1 -1
  43. data/lib/ruote/exp/fe_registerp.rb +112 -0
  44. data/lib/ruote/exp/fe_reserve.rb +3 -3
  45. data/lib/ruote/exp/fe_restore.rb +2 -2
  46. data/lib/ruote/exp/fe_save.rb +2 -2
  47. data/lib/ruote/exp/fe_sequence.rb +3 -4
  48. data/lib/ruote/exp/fe_set.rb +16 -7
  49. data/lib/ruote/exp/fe_subprocess.rb +23 -1
  50. data/lib/ruote/exp/fe_that.rb +92 -0
  51. data/lib/ruote/exp/fe_undo.rb +3 -3
  52. data/lib/ruote/exp/fe_unregisterp.rb +71 -0
  53. data/lib/ruote/exp/fe_wait.rb +2 -2
  54. data/lib/ruote/exp/flowexpression.rb +153 -78
  55. data/lib/ruote/exp/iterator.rb +2 -2
  56. data/lib/ruote/exp/merge.rb +2 -2
  57. data/lib/ruote/exp/ro_attributes.rb +14 -12
  58. data/lib/ruote/exp/ro_filters.rb +136 -0
  59. data/lib/ruote/exp/ro_persist.rb +51 -35
  60. data/lib/ruote/exp/ro_variables.rb +18 -27
  61. data/lib/ruote/fei.rb +73 -33
  62. data/lib/ruote/id/mnemo_wfid_generator.rb +1 -1
  63. data/lib/ruote/id/wfid_generator.rb +11 -4
  64. data/lib/ruote/log/default_history.rb +122 -0
  65. data/lib/ruote/log/pretty.rb +36 -8
  66. data/lib/ruote/log/storage_history.rb +37 -5
  67. data/lib/ruote/log/test_logger.rb +26 -24
  68. data/lib/ruote/log/wait_logger.rb +5 -3
  69. data/lib/ruote/part/block_participant.rb +22 -11
  70. data/lib/ruote/part/engine_participant.rb +6 -7
  71. data/lib/ruote/part/local_participant.rb +6 -12
  72. data/lib/ruote/part/no_op_participant.rb +4 -4
  73. data/lib/ruote/part/null_participant.rb +4 -4
  74. data/lib/ruote/part/smtp_participant.rb +4 -4
  75. data/lib/ruote/part/storage_participant.rb +40 -20
  76. data/lib/ruote/part/template.rb +4 -4
  77. data/lib/ruote/participant.rb +0 -1
  78. data/lib/ruote/{parser.rb → reader.rb} +30 -25
  79. data/lib/ruote/{parser → reader}/ruby_dsl.rb +28 -11
  80. data/lib/ruote/{parser → reader}/xml.rb +6 -5
  81. data/lib/ruote/receiver/base.rb +35 -13
  82. data/lib/ruote/storage/base.rb +20 -18
  83. data/lib/ruote/storage/composite_storage.rb +10 -10
  84. data/lib/ruote/storage/fs_storage.rb +17 -10
  85. data/lib/ruote/storage/hash_storage.rb +29 -18
  86. data/lib/ruote/svc/dispatch_pool.rb +41 -14
  87. data/lib/ruote/svc/dollar_sub.rb +50 -17
  88. data/lib/ruote/svc/error_handler.rb +19 -11
  89. data/lib/ruote/svc/expression_map.rb +4 -4
  90. data/lib/ruote/svc/participant_list.rb +105 -100
  91. data/lib/ruote/svc/tracker.rb +58 -18
  92. data/lib/ruote/svc/treechecker.rb +51 -24
  93. data/lib/ruote/tree_dot.rb +4 -4
  94. data/lib/ruote/util/filter.rb +440 -0
  95. data/lib/ruote/util/hashdot.rb +4 -4
  96. data/lib/ruote/util/look.rb +2 -6
  97. data/lib/ruote/util/lookup.rb +9 -7
  98. data/lib/ruote/util/misc.rb +40 -8
  99. data/lib/ruote/util/ometa.rb +1 -1
  100. data/lib/ruote/util/serializer.rb +4 -4
  101. data/lib/ruote/util/subprocess.rb +29 -9
  102. data/lib/ruote/util/time.rb +4 -4
  103. data/lib/ruote/util/tree.rb +3 -3
  104. data/lib/ruote/version.rb +2 -2
  105. data/lib/ruote/worker.rb +55 -32
  106. data/lib/ruote/workitem.rb +64 -11
  107. data/ruote.gemspec +31 -302
  108. data/test/bm/launch_bench.rb +37 -0
  109. data/test/functional/base.rb +60 -18
  110. data/test/functional/concurrent_base.rb +2 -2
  111. data/test/functional/ct_0_concurrence.rb +1 -1
  112. data/test/functional/ct_1_iterator.rb +1 -1
  113. data/test/functional/ct_2_cancel.rb +1 -1
  114. data/test/functional/eft_0_process_definition.rb +2 -2
  115. data/test/functional/eft_10_cancel_process.rb +1 -1
  116. data/test/functional/eft_11_wait.rb +19 -11
  117. data/test/functional/eft_12_listen.rb +79 -13
  118. data/test/functional/eft_13_iterator.rb +13 -10
  119. data/test/functional/eft_14_cursor.rb +98 -9
  120. data/test/functional/eft_15_loop.rb +6 -4
  121. data/test/functional/eft_16_if.rb +12 -0
  122. data/test/functional/eft_18_concurrent_iterator.rb +31 -32
  123. data/test/functional/eft_19_reserve.rb +4 -4
  124. data/test/functional/eft_1_echo.rb +9 -0
  125. data/test/functional/eft_20_save.rb +4 -4
  126. data/test/functional/{eft_28_when.rb → eft_28_once.rb} +33 -7
  127. data/test/functional/eft_30_ref.rb +17 -2
  128. data/test/functional/eft_31_registerp.rb +130 -0
  129. data/test/functional/eft_32_lose.rb +93 -0
  130. data/test/functional/eft_33_let.rb +31 -0
  131. data/test/functional/eft_34_given.rb +123 -0
  132. data/test/functional/eft_35_filter.rb +269 -0
  133. data/test/functional/eft_3_participant.rb +4 -6
  134. data/test/functional/eft_4_set.rb +16 -2
  135. data/test/functional/eft_5_subprocess.rb +2 -4
  136. data/test/functional/eft_6_concurrence.rb +29 -29
  137. data/test/functional/eft_8_undo.rb +39 -3
  138. data/test/functional/eft_9_redo.rb +94 -2
  139. data/test/functional/ft_10_dollar.rb +81 -2
  140. data/test/functional/ft_11_recursion.rb +13 -17
  141. data/test/functional/ft_12_launchitem.rb +9 -5
  142. data/test/functional/ft_13_variables.rb +7 -9
  143. data/test/functional/ft_14_re_apply.rb +6 -9
  144. data/test/functional/ft_15_timeout.rb +18 -18
  145. data/test/functional/ft_16_participant_params.rb +1 -3
  146. data/test/functional/ft_17_conditional.rb +25 -2
  147. data/test/functional/ft_18_kill.rb +65 -12
  148. data/test/functional/ft_1_process_status.rb +147 -71
  149. data/test/functional/ft_20_storage_participant.rb +0 -1
  150. data/test/functional/ft_21_forget.rb +82 -1
  151. data/test/functional/{ft_24_block_participants.rb → ft_24_block_participant.rb} +42 -11
  152. data/test/functional/ft_25_receiver.rb +47 -17
  153. data/test/functional/{ft_26_participant_timeout.rb → ft_26_participant_rtimeout.rb} +56 -19
  154. data/test/functional/ft_29_part_template.rb +6 -5
  155. data/test/functional/ft_2_errors.rb +21 -37
  156. data/test/functional/ft_30_smtp_participant.rb +1 -1
  157. data/test/functional/ft_31_part_blocking.rb +8 -6
  158. data/test/functional/ft_34_cursor_rewind.rb +13 -10
  159. data/test/functional/ft_35_add_service.rb +1 -1
  160. data/test/functional/ft_36_storage_history.rb +24 -1
  161. data/test/functional/ft_37_default_history.rb +109 -0
  162. data/test/functional/ft_38_participant_more.rb +10 -10
  163. data/test/functional/ft_39_wait_for.rb +12 -9
  164. data/test/functional/ft_3_participant_registration.rb +111 -32
  165. data/test/functional/ft_40_wait_logger.rb +2 -1
  166. data/test/functional/ft_41_participants.rb +30 -4
  167. data/test/functional/ft_43_participant_on_reply.rb +6 -23
  168. data/test/functional/ft_45_participant_accept.rb +4 -4
  169. data/test/functional/ft_46_launch_single.rb +36 -2
  170. data/test/functional/ft_47_wfid_generator.rb +54 -0
  171. data/test/functional/ft_48_lose.rb +112 -0
  172. data/test/functional/ft_49_engine_on_error.rb +201 -0
  173. data/test/functional/ft_4_cancel.rb +66 -6
  174. data/test/functional/ft_50_engine_config.rb +22 -0
  175. data/test/functional/ft_51_misc.rb +67 -0
  176. data/test/functional/ft_52_case.rb +134 -0
  177. data/test/functional/ft_53_engine_on_terminate.rb +95 -0
  178. data/test/functional/ft_54_patterns.rb +104 -0
  179. data/test/functional/{ft_37_engine_participant.rb → ft_55_engine_participant.rb} +4 -5
  180. data/test/functional/ft_56_filter_attribute.rb +259 -0
  181. data/test/functional/ft_5_on_error.rb +77 -30
  182. data/test/functional/ft_6_on_cancel.rb +66 -11
  183. data/test/functional/ft_7_tags.rb +94 -5
  184. data/test/functional/ft_8_participant_consumption.rb +36 -5
  185. data/test/functional/ft_9_subprocesses.rb +10 -10
  186. data/test/functional/rt_1_listen.rb +3 -3
  187. data/test/functional/{rt_3_when.rb → rt_3_once.rb} +4 -4
  188. data/test/functional/storage_helper.rb +15 -13
  189. data/test/functional/test.rb +1 -3
  190. data/test/test_helper.rb +0 -8
  191. data/test/unit/storage.rb +154 -10
  192. data/test/unit/{ut_0_ruby_parser.rb → ut_0_ruby_reader.rb} +61 -11
  193. data/test/unit/ut_11_lookup.rb +7 -0
  194. data/test/unit/ut_13_serializer.rb +1 -1
  195. data/test/unit/ut_15_util.rb +23 -0
  196. data/test/unit/{ut_16_parser.rb → ut_16_reader.rb} +11 -13
  197. data/test/unit/ut_1_fei.rb +57 -10
  198. data/test/unit/ut_20_composite_storage.rb +25 -11
  199. data/test/unit/ut_21_participant_list.rb +47 -0
  200. data/test/unit/ut_22_filter.rb +903 -0
  201. data/test/unit/ut_3_wait_logger.rb +2 -6
  202. data/test/unit/ut_6_condition.rb +164 -17
  203. data/test/unit/ut_7_workitem.rb +28 -0
  204. data/test/unit/ut_8_tree_to_dot.rb +1 -1
  205. data/test/unit/{ut_9_xml_parser.rb → ut_9_xml_reader.rb} +5 -5
  206. metadata +108 -84
  207. data/.gitignore +0 -4
  208. data/examples/barley.rb +0 -391
  209. data/examples/flickr_report.rb +0 -107
  210. data/examples/pong.rb +0 -37
  211. data/examples/ruote_quickstart.rb +0 -43
  212. data/examples/web_first_page.rb +0 -68
  213. data/lib/ruote/part/hash_participant.rb +0 -91
  214. data/test/README.rdoc +0 -15
  215. data/test/functional/crunner.sh +0 -19
  216. data/test/pdef.xml +0 -7
  217. data/test/unit/ut_2_wfidgen.rb +0 -21
@@ -30,7 +30,7 @@ class EftIteratorTest < Test::Unit::TestCase
30
30
 
31
31
  class TraceParticipant
32
32
  include Ruote::LocalParticipant
33
- def consume (wi)
33
+ def consume(wi)
34
34
  context.tracer << "#{wi.participant_name}/#{wi.fei.expid}\n"
35
35
  reply(wi)
36
36
  end
@@ -110,8 +110,9 @@ class EftIteratorTest < Test::Unit::TestCase
110
110
 
111
111
  @tracer << "#{workitem.participant_name}\n"
112
112
 
113
- workitem.fields['__command__'] = [ 'break', nil ] \
114
- if workitem.participant_name == 'bob'
113
+ if workitem.participant_name == 'bob'
114
+ workitem.fields['__command__'] = [ 'break', nil ]
115
+ end
115
116
  end
116
117
 
117
118
  #noisy
@@ -121,14 +122,14 @@ class EftIteratorTest < Test::Unit::TestCase
121
122
 
122
123
  def test_rewind
123
124
 
124
- rewound = false
125
+ stash[:rewound] = false
125
126
 
126
127
  @engine.register_participant '.*' do |workitem|
127
128
 
128
129
  @tracer << "#{workitem.participant_name}\n"
129
130
 
130
- if (not rewound) and workitem.participant_name == 'bob'
131
- rewound = true
131
+ if (not stash[:rewound]) and workitem.participant_name == 'bob'
132
+ stash[:rewound] = true
132
133
  workitem.fields['__command__'] = [ 'rewind', nil ]
133
134
  end
134
135
  end
@@ -144,8 +145,9 @@ class EftIteratorTest < Test::Unit::TestCase
144
145
 
145
146
  @tracer << "#{workitem.participant_name}\n"
146
147
 
147
- workitem.fields['__command__'] = [ 'skip', 1 ] \
148
- if workitem.participant_name == 'alice'
148
+ if workitem.participant_name == 'alice'
149
+ workitem.fields['__command__'] = [ 'skip', 1 ]
150
+ end
149
151
  end
150
152
 
151
153
  #noisy
@@ -159,8 +161,9 @@ class EftIteratorTest < Test::Unit::TestCase
159
161
 
160
162
  @tracer << "#{workitem.participant_name}\n"
161
163
 
162
- workitem.fields['__command__'] = [ 'jump', -1 ] \
163
- if workitem.participant_name == 'alice'
164
+ if workitem.participant_name == 'alice'
165
+ workitem.fields['__command__'] = [ 'jump', -1 ]
166
+ end
164
167
  end
165
168
 
166
169
  #noisy
@@ -85,6 +85,21 @@ class EftCursorTest < Test::Unit::TestCase
85
85
  assert_trace('a', pdef)
86
86
  end
87
87
 
88
+ def test_over
89
+
90
+ pdef = Ruote.process_definition :name => 'test' do
91
+ cursor do
92
+ echo 'a'
93
+ over
94
+ echo 'b'
95
+ end
96
+ end
97
+
98
+ #noisy
99
+
100
+ assert_trace('a', pdef)
101
+ end
102
+
88
103
  def test_jump_to_tag
89
104
 
90
105
  pdef = Ruote.process_definition :name => 'test' do
@@ -154,16 +169,14 @@ class EftCursorTest < Test::Unit::TestCase
154
169
  end
155
170
  end
156
171
 
157
- count = 0
158
- # closures ftw
159
-
160
172
  @engine.register_participant :author do |workitem|
161
173
  @tracer << "a\n"
162
- count = count + 1
174
+ stash[:count] ||= 0
175
+ stash[:count] += 1
163
176
  end
164
177
  @engine.register_participant :reviewer do |workitem|
165
178
  @tracer << "r\n"
166
- workitem.fields['not_ok'] = (count < 3)
179
+ workitem.fields['not_ok'] = (stash[:count] < 3)
167
180
  end
168
181
  @engine.register_participant :publisher do |workitem|
169
182
  @tracer << "p\n"
@@ -213,7 +226,7 @@ class EftCursorTest < Test::Unit::TestCase
213
226
  end
214
227
  end
215
228
 
216
- @engine.register_participant :alpha, Ruote::NoOpParticipant.new
229
+ @engine.register_participant :alpha, Ruote::NoOpParticipant
217
230
 
218
231
  #noisy
219
232
 
@@ -277,15 +290,15 @@ class EftCursorTest < Test::Unit::TestCase
277
290
 
278
291
  class Alpha
279
292
  include Ruote::LocalParticipant
280
- def consume (workitem)
293
+ def consume(workitem)
281
294
  workitem.command = 'break'
282
295
  reply_to_engine(workitem)
283
296
  end
284
- def cancel (fei, flavour)
297
+ def cancel(fei, flavour)
285
298
  end
286
299
  end
287
300
  class Bravo < Alpha
288
- def consume (workitem)
301
+ def consume(workitem)
289
302
  workitem.command = 'skip 1'
290
303
  reply_to_engine(workitem)
291
304
  end
@@ -313,5 +326,81 @@ class EftCursorTest < Test::Unit::TestCase
313
326
 
314
327
  assert_trace "in\ndone.", pdef
315
328
  end
329
+
330
+ def test_cursor_with_lonely_rewind
331
+
332
+ pdef = Ruote.define do
333
+ cursor do
334
+ rewind
335
+ end
336
+ end
337
+
338
+ #@engine.noisy = true
339
+
340
+ wfid = @engine.launch(pdef)
341
+
342
+ @engine.wait_for(9)
343
+
344
+ assert_not_nil @engine.process(wfid)
345
+ end
346
+
347
+ class Charly
348
+ include Ruote::LocalParticipant
349
+ def initialize(opts)
350
+ @opts = opts
351
+ end
352
+ def consume(workitem)
353
+ workitem.command = @opts['command']
354
+ reply_to_engine(workitem)
355
+ end
356
+ def cancel(fei, flavour)
357
+ end
358
+ end
359
+
360
+ JUMP_DEF = Ruote.process_definition do
361
+ cursor do
362
+ echo 'top'
363
+ charly
364
+ echo 'middle'
365
+ delta
366
+ echo 'bottom'
367
+ end
368
+ end
369
+
370
+ def test_workitem_command_and_jump_array
371
+
372
+ #noisy
373
+
374
+ @engine.register do
375
+ charly EftCursorTest::Charly, 'command' => [ 'jump', 'delta' ]
376
+ catchall Ruote::NoOpParticipant
377
+ end
378
+
379
+ assert_trace "top\nbottom", JUMP_DEF
380
+ end
381
+
382
+ def test_workitem_command_and_jump_string
383
+
384
+ #noisy
385
+
386
+ @engine.register do
387
+ charly EftCursorTest::Charly, 'command' => 'jump delta'
388
+ catchall Ruote::NoOpParticipant
389
+ end
390
+
391
+ assert_trace "top\nbottom", JUMP_DEF
392
+ end
393
+
394
+ def test_workitem_command_and_jump_to_string
395
+
396
+ #noisy
397
+
398
+ @engine.register do
399
+ charly EftCursorTest::Charly, 'command' => 'jump to delta'
400
+ catchall Ruote::NoOpParticipant
401
+ end
402
+
403
+ assert_trace "top\nbottom", JUMP_DEF
404
+ end
316
405
  end
317
406
 
@@ -34,8 +34,9 @@ class EftLoopTest < Test::Unit::TestCase
34
34
  @tracer << "b\n"
35
35
  workitem.fields['count'] += 1
36
36
 
37
- workitem.fields['__command__'] = [ 'break', nil ] \
38
- if workitem.fields['count'] > 5
37
+ if workitem.fields['count'] > 5
38
+ workitem.fields['__command__'] = [ 'break', nil ]
39
+ end
39
40
  end
40
41
 
41
42
  assert_trace(%w[ a b a b a b ], pdef)
@@ -57,8 +58,9 @@ class EftLoopTest < Test::Unit::TestCase
57
58
  (workitem.fields['count'] ||= 0)
58
59
  workitem.fields['count'] += 1
59
60
 
60
- workitem.fields['__command__'] = [ 'break', nil ] \
61
- if workitem.fields['count'] > 5
61
+ if workitem.fields['count'] > 5
62
+ workitem.fields['__command__'] = [ 'break', nil ]
63
+ end
62
64
  end
63
65
 
64
66
  assert_trace(%w[ a a a a a a ], pdef)
@@ -167,5 +167,17 @@ class EftIfTest < Test::Unit::TestCase
167
167
 
168
168
  assert_trace('alpha', { :state => 'A' }, pdef)
169
169
  end
170
+
171
+ def test_t
172
+
173
+ pdef = Ruote.define do
174
+ _if :t => 'true' do
175
+ echo 'then'
176
+ end
177
+ echo 'done.'
178
+ end
179
+
180
+ assert_trace("then\ndone.", pdef)
181
+ end
170
182
  end
171
183
 
@@ -7,9 +7,6 @@
7
7
 
8
8
  require File.join(File.dirname(__FILE__), 'base')
9
9
 
10
- require 'ruote/part/hash_participant'
11
- require 'ruote/part/null_participant'
12
-
13
10
 
14
11
  class EftConcurrentIteratorTest < Test::Unit::TestCase
15
12
  include FunctionalBase
@@ -33,7 +30,7 @@ class EftConcurrentIteratorTest < Test::Unit::TestCase
33
30
 
34
31
  pdef = Ruote.process_definition :name => 'test' do
35
32
  sequence do
36
- concurrent_iterator :on_val => '', :to_var => 'v' do
33
+ citerator :on_val => '', :to_var => 'v' do
37
34
  echo 'x'
38
35
  end
39
36
  echo 'done.'
@@ -146,33 +143,36 @@ class EftConcurrentIteratorTest < Test::Unit::TestCase
146
143
  end
147
144
  end
148
145
 
149
- p1 = @engine.register_participant :participant_1, Ruote::HashParticipant.new
150
- p2 = @engine.register_participant :participant_2, Ruote::HashParticipant.new
151
- p3 = @engine.register_participant :participant_3, Ruote::HashParticipant.new
146
+ sto = @engine.register_participant '.+', Ruote::StorageParticipant
147
+
148
+ assert_equal 0, sto.size # just to be sure
152
149
 
153
150
  #noisy
154
151
 
155
152
  wfid = @engine.launch(pdef)
156
153
 
154
+ wait_for(:participant_1)
157
155
  wait_for(:participant_1)
158
156
 
159
- assert_equal 0, p2.size
160
- assert_equal 0, p3.size
157
+ assert_equal(
158
+ { 'participant_1' => 2 },
159
+ sto.per_participant_count)
161
160
 
162
- p1.reply(p1.first)
161
+ sto.reply(sto.first)
163
162
 
164
163
  wait_for(:participant_2)
164
+ wait_for(1)
165
165
 
166
- assert_equal 1, p2.size
167
- assert_equal 0, p3.size
166
+ assert_equal(
167
+ { 'participant_1' => 1, 'participant_2' => 1 },
168
+ sto.per_participant_count)
168
169
 
169
- p2.reply(p2.first)
170
+ sto.reply(sto.per_participant['participant_2'].first)
170
171
 
171
172
  wait_for(3)
172
173
 
173
- assert_equal 0, p3.size
174
- assert_equal 1, p1.size
175
- assert_equal 0, p2.size
174
+ assert_equal 1, sto.size
175
+ assert_equal 'participant_1', sto.first.participant_name
176
176
  end
177
177
 
178
178
  def test_passing_non_array_as_thing_to_iterate
@@ -269,10 +269,8 @@ class EftConcurrentIteratorTest < Test::Unit::TestCase
269
269
  bravo
270
270
  end
271
271
 
272
- mf = nil
273
-
274
272
  @engine.register_participant :bravo do |workitem|
275
- mf = workitem.fields
273
+ stash[:mf] = workitem.fields
276
274
  nil
277
275
  end
278
276
 
@@ -280,7 +278,7 @@ class EftConcurrentIteratorTest < Test::Unit::TestCase
280
278
 
281
279
  assert_trace(%w[ . . . ], pdef)
282
280
 
283
- mf = ('0'..'2').to_a.map { |k| mf[k]['f'] }.sort
281
+ mf = ('0'..'2').to_a.map { |k| @engine.context.stash[:mf][k]['f'] }.sort
284
282
  assert_equal %w[ a b c ], mf
285
283
  end
286
284
 
@@ -293,10 +291,8 @@ class EftConcurrentIteratorTest < Test::Unit::TestCase
293
291
  bravo
294
292
  end
295
293
 
296
- mf = nil
297
-
298
294
  @engine.register_participant :bravo do |workitem|
299
- mf = workitem.fields
295
+ stash[:mf] = workitem.fields
300
296
  nil
301
297
  end
302
298
 
@@ -306,10 +302,10 @@ class EftConcurrentIteratorTest < Test::Unit::TestCase
306
302
 
307
303
  assert_equal(
308
304
  [["a"], ["b"]],
309
- mf['stack'].collect { |f| f.values }.sort)
305
+ @engine.context.stash[:mf]['stack'].collect { |f| f.values }.sort)
310
306
  assert_equal(
311
307
  {"on"=>"a, b", "to_f"=>"f", "merge_type"=>"stack"},
312
- mf['stack_attributes'])
308
+ @engine.context.stash[:mf]['stack_attributes'])
313
309
  end
314
310
 
315
311
  def test_cancel
@@ -326,8 +322,8 @@ class EftConcurrentIteratorTest < Test::Unit::TestCase
326
322
  end
327
323
  end
328
324
 
329
- a_count = 0
330
- @engine.register_participant(:alpha) { |wi| a_count += 1 }
325
+ @engine.context.stash[:a_count] = 0
326
+ @engine.register_participant(:alpha) { |wi| stash[:a_count] += 1 }
331
327
  @engine.register_participant(:bravo, Ruote::NullParticipant)
332
328
 
333
329
  #noisy
@@ -337,7 +333,7 @@ class EftConcurrentIteratorTest < Test::Unit::TestCase
337
333
  wait_for(2 + n * 5)
338
334
  #p "=" * 80
339
335
 
340
- assert_equal n, a_count
336
+ assert_equal n, @engine.context.stash[:a_count]
341
337
 
342
338
  @engine.cancel_process(wfid)
343
339
  wait_for(wfid)
@@ -356,12 +352,11 @@ class EftConcurrentIteratorTest < Test::Unit::TestCase
356
352
  end
357
353
  end
358
354
 
359
- @engine.register_participant 'alpha' do |workitem|
355
+ @engine.register_participant 'alpha' do |wi|
360
356
 
361
357
  @tracer << "#{workitem.fields['f']}\n"
362
358
 
363
- workitem.fields['__add_branches__'] = %w[ a b ] \
364
- if workitem.fields['f'] == 2
359
+ wi.fields['__add_branches__'] = %w[ a b ] if wi.fields['f'] == 2
365
360
  end
366
361
 
367
362
  #noisy
@@ -377,10 +372,14 @@ class EftConcurrentIteratorTest < Test::Unit::TestCase
377
372
  def register_catchall_participant
378
373
 
379
374
  @subs = []
375
+ subs = @subs
376
+ @engine.context.instance_eval do
377
+ @subs = subs
378
+ end
380
379
 
381
380
  @engine.register_participant '.*' do |workitem|
382
381
 
383
- @subs << workitem.fei.sub_wfid
382
+ @subs << workitem.fei.subid
384
383
 
385
384
  @tracer << [
386
385
  workitem.participant_name, workitem.fei.expid
@@ -7,7 +7,7 @@
7
7
 
8
8
  require File.join(File.dirname(__FILE__), 'base')
9
9
 
10
- require 'ruote/part/hash_participant'
10
+ require 'ruote/participant'
11
11
 
12
12
 
13
13
  class EftReserveTest < Test::Unit::TestCase
@@ -28,7 +28,7 @@ class EftReserveTest < Test::Unit::TestCase
28
28
 
29
29
  #noisy
30
30
 
31
- alpha = @engine.register_participant :alpha, Ruote::HashParticipant.new
31
+ alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
32
32
 
33
33
  wfid = @engine.launch(pdef)
34
34
 
@@ -74,7 +74,7 @@ class EftReserveTest < Test::Unit::TestCase
74
74
 
75
75
  #noisy
76
76
 
77
- alpha = @engine.register_participant :alpha, Ruote::HashParticipant.new
77
+ alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
78
78
 
79
79
  wfid = @engine.launch(pdef)
80
80
 
@@ -112,7 +112,7 @@ class EftReserveTest < Test::Unit::TestCase
112
112
 
113
113
  #noisy
114
114
 
115
- alpha = @engine.register_participant :alpha, Ruote::HashParticipant.new
115
+ alpha = @engine.register_participant :alpha, Ruote::StorageParticipant
116
116
 
117
117
  wfid = @engine.launch(pdef)
118
118