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.
Files changed (305) hide show
  1. data/CHANGELOG.txt +166 -1
  2. data/CREDITS.txt +36 -17
  3. data/LICENSE.txt +1 -1
  4. data/README.rdoc +1 -7
  5. data/Rakefile +38 -29
  6. data/TODO.txt +93 -52
  7. data/lib/ruote-fs.rb +3 -0
  8. data/lib/ruote.rb +5 -1
  9. data/lib/ruote/context.rb +140 -35
  10. data/lib/ruote/dashboard.rb +1247 -0
  11. data/lib/ruote/{engine → dboard}/process_error.rb +22 -2
  12. data/lib/ruote/dboard/process_status.rb +587 -0
  13. data/lib/ruote/engine.rb +6 -871
  14. data/lib/ruote/exp/command.rb +7 -2
  15. data/lib/ruote/exp/commanded.rb +2 -2
  16. data/lib/ruote/exp/condition.rb +38 -13
  17. data/lib/ruote/exp/fe_add_branches.rb +1 -1
  18. data/lib/ruote/exp/fe_apply.rb +1 -1
  19. data/lib/ruote/exp/fe_await.rb +357 -0
  20. data/lib/ruote/exp/fe_cancel_process.rb +17 -3
  21. data/lib/ruote/exp/fe_command.rb +8 -4
  22. data/lib/ruote/exp/fe_concurrence.rb +218 -18
  23. data/lib/ruote/exp/fe_concurrent_iterator.rb +71 -10
  24. data/lib/ruote/exp/fe_cron.rb +3 -10
  25. data/lib/ruote/exp/fe_cursor.rb +14 -4
  26. data/lib/ruote/exp/fe_define.rb +3 -1
  27. data/lib/ruote/exp/fe_echo.rb +1 -1
  28. data/lib/ruote/exp/fe_equals.rb +1 -1
  29. data/lib/ruote/exp/fe_error.rb +1 -1
  30. data/lib/ruote/exp/fe_filter.rb +163 -4
  31. data/lib/ruote/exp/fe_forget.rb +21 -4
  32. data/lib/ruote/exp/fe_given.rb +1 -1
  33. data/lib/ruote/exp/fe_if.rb +1 -1
  34. data/lib/ruote/exp/fe_inc.rb +102 -35
  35. data/lib/ruote/exp/fe_iterator.rb +47 -12
  36. data/lib/ruote/exp/fe_listen.rb +96 -11
  37. data/lib/ruote/exp/fe_lose.rb +31 -4
  38. data/lib/ruote/exp/fe_noop.rb +1 -1
  39. data/lib/ruote/exp/fe_on_error.rb +109 -0
  40. data/lib/ruote/exp/fe_once.rb +10 -19
  41. data/lib/ruote/exp/fe_participant.rb +90 -28
  42. data/lib/ruote/exp/fe_read.rb +69 -0
  43. data/lib/ruote/exp/fe_redo.rb +3 -2
  44. data/lib/ruote/exp/fe_ref.rb +57 -27
  45. data/lib/ruote/exp/fe_registerp.rb +1 -3
  46. data/lib/ruote/exp/fe_reserve.rb +1 -1
  47. data/lib/ruote/exp/fe_restore.rb +6 -6
  48. data/lib/ruote/exp/fe_save.rb +12 -19
  49. data/lib/ruote/exp/fe_sequence.rb +38 -2
  50. data/lib/ruote/exp/fe_set.rb +143 -40
  51. data/lib/ruote/exp/{fe_let.rb → fe_stall.rb} +7 -38
  52. data/lib/ruote/exp/fe_subprocess.rb +8 -2
  53. data/lib/ruote/exp/fe_that.rb +1 -1
  54. data/lib/ruote/exp/fe_undo.rb +40 -4
  55. data/lib/ruote/exp/fe_unregisterp.rb +1 -3
  56. data/lib/ruote/exp/fe_wait.rb +12 -25
  57. data/lib/ruote/exp/{flowexpression.rb → flow_expression.rb} +375 -229
  58. data/lib/ruote/exp/iterator.rb +2 -2
  59. data/lib/ruote/exp/merge.rb +78 -17
  60. data/lib/ruote/exp/ro_attributes.rb +46 -36
  61. data/lib/ruote/exp/ro_filters.rb +34 -8
  62. data/lib/ruote/exp/ro_on_x.rb +431 -0
  63. data/lib/ruote/exp/ro_persist.rb +19 -7
  64. data/lib/ruote/exp/ro_timers.rb +123 -0
  65. data/lib/ruote/exp/ro_variables.rb +90 -29
  66. data/lib/ruote/fei.rb +57 -3
  67. data/lib/ruote/fs.rb +3 -0
  68. data/lib/ruote/id/mnemo_wfid_generator.rb +30 -7
  69. data/lib/ruote/id/wfid_generator.rb +17 -38
  70. data/lib/ruote/log/default_history.rb +23 -9
  71. data/lib/ruote/log/fancy_printing.rb +265 -0
  72. data/lib/ruote/log/storage_history.rb +23 -13
  73. data/lib/ruote/log/wait_logger.rb +224 -17
  74. data/lib/ruote/observer.rb +82 -0
  75. data/lib/ruote/part/block_participant.rb +65 -28
  76. data/lib/ruote/part/code_participant.rb +81 -0
  77. data/lib/ruote/part/engine_participant.rb +7 -2
  78. data/lib/ruote/part/local_participant.rb +221 -21
  79. data/lib/ruote/part/no_op_participant.rb +1 -1
  80. data/lib/ruote/part/null_participant.rb +1 -1
  81. data/lib/ruote/part/participant.rb +50 -0
  82. data/lib/ruote/part/rev_participant.rb +178 -0
  83. data/lib/ruote/part/smtp_participant.rb +2 -2
  84. data/lib/ruote/part/storage_participant.rb +228 -60
  85. data/lib/ruote/part/template.rb +1 -1
  86. data/lib/ruote/participant.rb +2 -0
  87. data/lib/ruote/reader.rb +205 -68
  88. data/lib/ruote/reader/json.rb +49 -0
  89. data/lib/ruote/reader/radial.rb +303 -0
  90. data/lib/ruote/reader/ruby_dsl.rb +44 -9
  91. data/lib/ruote/reader/xml.rb +11 -8
  92. data/lib/ruote/receiver/base.rb +98 -45
  93. data/lib/ruote/storage/base.rb +104 -35
  94. data/lib/ruote/storage/composite_storage.rb +50 -60
  95. data/lib/ruote/storage/fs_storage.rb +25 -34
  96. data/lib/ruote/storage/hash_storage.rb +38 -36
  97. data/lib/ruote/svc/dispatch_pool.rb +104 -35
  98. data/lib/ruote/svc/dollar_sub.rb +10 -8
  99. data/lib/ruote/svc/error_handler.rb +108 -52
  100. data/lib/ruote/svc/expression_map.rb +3 -3
  101. data/lib/ruote/svc/participant_list.rb +160 -55
  102. data/lib/ruote/svc/tracker.rb +31 -31
  103. data/lib/ruote/svc/treechecker.rb +28 -16
  104. data/lib/ruote/tree_dot.rb +1 -1
  105. data/lib/ruote/util/deep.rb +143 -0
  106. data/lib/ruote/util/filter.rb +125 -18
  107. data/lib/ruote/util/hashdot.rb +15 -13
  108. data/lib/ruote/util/look.rb +1 -1
  109. data/lib/ruote/util/lookup.rb +60 -22
  110. data/lib/ruote/util/misc.rb +63 -18
  111. data/lib/ruote/util/mpatch.rb +53 -0
  112. data/lib/ruote/util/ometa.rb +1 -2
  113. data/lib/ruote/util/process_observer.rb +177 -0
  114. data/lib/ruote/util/subprocess.rb +1 -1
  115. data/lib/ruote/util/time.rb +2 -2
  116. data/lib/ruote/util/tree.rb +64 -2
  117. data/lib/ruote/version.rb +3 -2
  118. data/lib/ruote/worker.rb +421 -92
  119. data/lib/ruote/workitem.rb +157 -22
  120. data/ruote.gemspec +15 -9
  121. data/test/bm/ci.rb +0 -2
  122. data/test/bm/ici.rb +0 -2
  123. data/test/bm/load_26c.rb +0 -3
  124. data/test/bm/mega.rb +0 -2
  125. data/test/functional/base.rb +57 -43
  126. data/test/functional/concurrent_base.rb +16 -13
  127. data/test/functional/ct_0_concurrence.rb +7 -11
  128. data/test/functional/ct_1_iterator.rb +9 -11
  129. data/test/functional/ct_2_cancel.rb +28 -17
  130. data/test/functional/eft_0_flow_expression.rb +35 -0
  131. data/test/functional/eft_10_cancel_process.rb +1 -1
  132. data/test/functional/eft_11_wait.rb +13 -13
  133. data/test/functional/eft_12_listen.rb +199 -66
  134. data/test/functional/eft_13_iterator.rb +95 -29
  135. data/test/functional/eft_14_cursor.rb +74 -24
  136. data/test/functional/eft_15_loop.rb +7 -7
  137. data/test/functional/eft_16_if.rb +1 -1
  138. data/test/functional/eft_17_equals.rb +1 -1
  139. data/test/functional/eft_18_concurrent_iterator.rb +156 -68
  140. data/test/functional/eft_19_reserve.rb +15 -15
  141. data/test/functional/eft_1_echo.rb +1 -1
  142. data/test/functional/eft_20_save.rb +51 -9
  143. data/test/functional/eft_21_restore.rb +1 -1
  144. data/test/functional/eft_22_noop.rb +1 -1
  145. data/test/functional/eft_23_apply.rb +1 -1
  146. data/test/functional/eft_24_add_branches.rb +7 -8
  147. data/test/functional/eft_25_command.rb +1 -1
  148. data/test/functional/eft_26_error.rb +11 -11
  149. data/test/functional/eft_27_inc.rb +111 -67
  150. data/test/functional/eft_28_once.rb +16 -16
  151. data/test/functional/eft_29_cron.rb +9 -9
  152. data/test/functional/eft_2_sequence.rb +23 -4
  153. data/test/functional/eft_30_ref.rb +36 -24
  154. data/test/functional/eft_31_registerp.rb +24 -24
  155. data/test/functional/eft_32_lose.rb +46 -20
  156. data/test/functional/eft_34_given.rb +1 -1
  157. data/test/functional/eft_35_filter.rb +161 -7
  158. data/test/functional/eft_36_read.rb +97 -0
  159. data/test/functional/{eft_0_process_definition.rb → eft_37_process_definition.rb} +4 -4
  160. data/test/functional/eft_38_on_error.rb +195 -0
  161. data/test/functional/eft_39_stall.rb +35 -0
  162. data/test/functional/eft_3_participant.rb +77 -22
  163. data/test/functional/eft_40_await.rb +297 -0
  164. data/test/functional/eft_4_set.rb +110 -11
  165. data/test/functional/eft_5_subprocess.rb +27 -5
  166. data/test/functional/eft_6_concurrence.rb +299 -60
  167. data/test/functional/eft_7_forget.rb +24 -22
  168. data/test/functional/eft_8_undo.rb +52 -15
  169. data/test/functional/eft_9_redo.rb +18 -20
  170. data/test/functional/ft_0_worker.rb +122 -13
  171. data/test/functional/ft_10_dollar.rb +77 -16
  172. data/test/functional/ft_11_recursion.rb +9 -9
  173. data/test/functional/ft_12_launchitem.rb +7 -9
  174. data/test/functional/ft_13_variables.rb +125 -22
  175. data/test/functional/ft_14_re_apply.rb +112 -56
  176. data/test/functional/ft_15_timeout.rb +64 -33
  177. data/test/functional/ft_16_participant_params.rb +59 -6
  178. data/test/functional/ft_17_conditional.rb +68 -2
  179. data/test/functional/ft_18_kill.rb +48 -30
  180. data/test/functional/ft_19_participant_code.rb +67 -0
  181. data/test/functional/ft_1_process_status.rb +222 -150
  182. data/test/functional/ft_20_storage_participant.rb +445 -44
  183. data/test/functional/ft_21_forget.rb +21 -26
  184. data/test/functional/ft_22_process_definitions.rb +8 -6
  185. data/test/functional/ft_23_load_defs.rb +29 -5
  186. data/test/functional/ft_24_block_participant.rb +199 -20
  187. data/test/functional/ft_25_receiver.rb +98 -46
  188. data/test/functional/ft_26_participant_rtimeout.rb +34 -26
  189. data/test/functional/ft_27_var_indirection.rb +40 -5
  190. data/test/functional/ft_28_null_noop_participants.rb +5 -5
  191. data/test/functional/ft_29_part_template.rb +2 -2
  192. data/test/functional/ft_2_errors.rb +106 -74
  193. data/test/functional/ft_30_smtp_participant.rb +7 -7
  194. data/test/functional/ft_31_part_blocking.rb +11 -11
  195. data/test/functional/ft_32_scope.rb +50 -0
  196. data/test/functional/ft_33_participant_subprocess_priority.rb +3 -3
  197. data/test/functional/ft_34_cursor_rewind.rb +14 -14
  198. data/test/functional/ft_35_add_service.rb +67 -9
  199. data/test/functional/ft_36_storage_history.rb +92 -24
  200. data/test/functional/ft_37_default_history.rb +35 -23
  201. data/test/functional/ft_38_participant_more.rb +189 -32
  202. data/test/functional/ft_39_wait_for.rb +25 -25
  203. data/test/functional/ft_3_participant_registration.rb +235 -107
  204. data/test/functional/ft_40_wait_logger.rb +105 -18
  205. data/test/functional/ft_41_participants.rb +13 -12
  206. data/test/functional/ft_42_storage_copy.rb +12 -12
  207. data/test/functional/ft_43_participant_on_reply.rb +85 -11
  208. data/test/functional/ft_44_var_participant.rb +5 -5
  209. data/test/functional/ft_45_participant_accept.rb +3 -3
  210. data/test/functional/ft_46_launch_single.rb +17 -17
  211. data/test/functional/ft_47_wfids.rb +41 -0
  212. data/test/functional/ft_48_lose.rb +19 -25
  213. data/test/functional/ft_49_engine_on_error.rb +54 -70
  214. data/test/functional/ft_4_cancel.rb +84 -26
  215. data/test/functional/ft_50_engine_config.rb +4 -4
  216. data/test/functional/ft_51_misc.rb +12 -12
  217. data/test/functional/ft_52_case.rb +17 -17
  218. data/test/functional/ft_53_engine_on_terminate.rb +18 -21
  219. data/test/functional/ft_54_patterns.rb +18 -16
  220. data/test/functional/ft_55_engine_participant.rb +55 -55
  221. data/test/functional/ft_56_filter_attribute.rb +90 -52
  222. data/test/functional/ft_57_rev_participant.rb +252 -0
  223. data/test/functional/ft_58_workitem.rb +150 -0
  224. data/test/functional/ft_59_pause.rb +329 -0
  225. data/test/functional/ft_5_on_error.rb +430 -77
  226. data/test/functional/ft_60_code_participant.rb +65 -0
  227. data/test/functional/ft_61_trailing_fields.rb +34 -0
  228. data/test/functional/ft_62_exp_name_and_dollar_substitution.rb +35 -0
  229. data/test/functional/ft_63_participants_221.rb +458 -0
  230. data/test/functional/ft_64_stash.rb +41 -0
  231. data/test/functional/ft_65_timers.rb +313 -0
  232. data/test/functional/ft_66_flank.rb +133 -0
  233. data/test/functional/ft_67_radial_misc.rb +34 -0
  234. data/test/functional/ft_68_reput.rb +72 -0
  235. data/test/functional/ft_69_worker_info.rb +56 -0
  236. data/test/functional/ft_6_on_cancel.rb +189 -36
  237. data/test/functional/ft_70_take_and_discard_attributes.rb +94 -0
  238. data/test/functional/ft_71_retries.rb +144 -0
  239. data/test/functional/ft_72_on_terminate.rb +60 -0
  240. data/test/functional/ft_73_raise_msg.rb +107 -0
  241. data/test/functional/ft_74_respark.rb +106 -0
  242. data/test/functional/ft_75_context.rb +66 -0
  243. data/test/functional/ft_76_observer.rb +53 -0
  244. data/test/functional/ft_77_process_observer.rb +157 -0
  245. data/test/functional/ft_78_part_participant.rb +37 -0
  246. data/test/functional/ft_7_tags.rb +238 -50
  247. data/test/functional/ft_8_participant_consumption.rb +27 -21
  248. data/test/functional/ft_9_subprocesses.rb +48 -18
  249. data/test/functional/restart_base.rb +4 -6
  250. data/test/functional/rt_0_wait.rb +10 -10
  251. data/test/functional/rt_1_listen.rb +6 -6
  252. data/test/functional/rt_2_errors.rb +12 -12
  253. data/test/functional/rt_3_once.rb +17 -12
  254. data/test/functional/rt_4_cron.rb +17 -17
  255. data/test/functional/rt_5_timeout.rb +13 -13
  256. data/test/functional/signals.rb +103 -0
  257. data/test/functional/storage.rb +730 -0
  258. data/test/functional/storage_helper.rb +48 -35
  259. data/test/functional/test.rb +6 -2
  260. data/test/misc/idle.rb +21 -0
  261. data/test/misc/light.rb +29 -0
  262. data/test/path_helper.rb +1 -1
  263. data/test/test.rb +2 -5
  264. data/test/test_helper.rb +13 -0
  265. data/test/unit/test.rb +1 -4
  266. data/test/unit/ut_0_ruby_reader.rb +25 -9
  267. data/test/unit/ut_10_participants.rb +47 -0
  268. data/test/unit/ut_11_lookup.rb +59 -2
  269. data/test/unit/ut_12_wait_logger.rb +123 -0
  270. data/test/unit/ut_14_is_uri.rb +1 -1
  271. data/test/unit/ut_15_util.rb +1 -1
  272. data/test/unit/ut_16_reader.rb +136 -14
  273. data/test/unit/ut_17_merge.rb +155 -0
  274. data/test/unit/ut_19_part_template.rb +1 -1
  275. data/test/unit/ut_1_fei.rb +11 -2
  276. data/test/unit/ut_20_composite_storage.rb +27 -1
  277. data/test/unit/{ut_21_participant_list.rb → ut_21_svc_participant_list.rb} +2 -3
  278. data/test/unit/ut_22_filter.rb +231 -10
  279. data/test/unit/ut_23_svc_tracker.rb +48 -0
  280. data/test/unit/ut_24_radial_reader.rb +458 -0
  281. data/test/unit/ut_25_process_status.rb +143 -0
  282. data/test/unit/ut_26_deep.rb +131 -0
  283. data/test/unit/ut_2_dashboard.rb +114 -0
  284. data/test/unit/ut_3_worker.rb +54 -0
  285. data/test/unit/ut_4_expmap.rb +1 -1
  286. data/test/unit/ut_5_tree.rb +23 -23
  287. data/test/unit/ut_6_condition.rb +71 -29
  288. data/test/unit/ut_7_workitem.rb +18 -4
  289. data/test/unit/ut_8_tree_to_dot.rb +1 -1
  290. data/test/unit/ut_9_xml_reader.rb +1 -1
  291. metadata +142 -63
  292. data/jruby_issue.txt +0 -32
  293. data/lib/ruote/engine/process_status.rb +0 -403
  294. data/lib/ruote/log/pretty.rb +0 -165
  295. data/lib/ruote/log/test_logger.rb +0 -204
  296. data/lib/ruote/util/serializer.rb +0 -103
  297. data/phil.txt +0 -14
  298. data/test/functional/eft_33_let.rb +0 -31
  299. data/test/functional/ft_19_alias.rb +0 -33
  300. data/test/functional/ft_47_wfid_generator.rb +0 -54
  301. data/test/unit/storage.rb +0 -403
  302. data/test/unit/storages.rb +0 -37
  303. data/test/unit/ut_13_serializer.rb +0 -65
  304. data/test/unit/ut_18_engine.rb +0 -47
  305. data/test/unit/ut_3_wait_logger.rb +0 -39
@@ -5,7 +5,7 @@
5
5
  # Mon Jun 29 09:35:48 JST 2009
6
6
  #
7
7
 
8
- require File.join(File.dirname(__FILE__), 'base')
8
+ require File.expand_path('../base', __FILE__)
9
9
 
10
10
  require 'ruote/participant'
11
11
 
@@ -44,7 +44,7 @@ class EftIteratorTest < Test::Unit::TestCase
44
44
  end
45
45
  end
46
46
 
47
- @engine.register_participant '.*', TraceParticipant
47
+ @dashboard.register_participant '.*', TraceParticipant
48
48
 
49
49
  #noisy
50
50
 
@@ -59,7 +59,7 @@ class EftIteratorTest < Test::Unit::TestCase
59
59
  end
60
60
  end
61
61
 
62
- @engine.register_participant '.*', TraceParticipant
62
+ @dashboard.register_participant '.*', TraceParticipant
63
63
 
64
64
  assert_trace(%w[ alice/0_0_0 bob/0_0_0 charly/0_0_0 ], pdef)
65
65
  end
@@ -73,11 +73,26 @@ class EftIteratorTest < Test::Unit::TestCase
73
73
  end
74
74
  end
75
75
 
76
- @engine.register_participant '.*', TraceParticipant
76
+ @dashboard.register_participant '.*', TraceParticipant
77
77
 
78
78
  assert_trace(%w[ alice/0_1_0 bob/0_1_0 charly/0_1_0 ], pdef)
79
79
  end
80
80
 
81
+ def test_on_nested_f
82
+
83
+ pdef = Ruote.process_definition :name => 'test' do
84
+ set 'f:data' => {}
85
+ set 'f:data.people' => %w[ alice bob charly ]
86
+ iterator :on_f => 'data.people', :to_var => 'v' do
87
+ participant '${v:v}'
88
+ end
89
+ end
90
+
91
+ @dashboard.register_participant '.*', TraceParticipant
92
+
93
+ assert_trace(%w[ alice/0_2_0 bob/0_2_0 charly/0_2_0 ], pdef)
94
+ end
95
+
81
96
  def test_to_f
82
97
 
83
98
  pdef = Ruote.process_definition :name => 'test' do
@@ -86,8 +101,8 @@ class EftIteratorTest < Test::Unit::TestCase
86
101
  end
87
102
  end
88
103
 
89
- @engine.register_participant '.*' do |workitem|
90
- @tracer << "#{workitem.fields['f']}/#{workitem.fei.expid}\n"
104
+ @dashboard.register_participant '.*' do |workitem|
105
+ tracer << "#{workitem.fields['f']}/#{workitem.fei.expid}\n"
91
106
  end
92
107
 
93
108
  #noisy
@@ -95,6 +110,28 @@ class EftIteratorTest < Test::Unit::TestCase
95
110
  assert_trace(%w[ alice/0_0_0 bob/0_0_0 charly/0_0_0 ], pdef)
96
111
  end
97
112
 
113
+ def test_to
114
+
115
+ pdef = Ruote.process_definition :name => 'test' do
116
+ iterator :on_val => 'a, b', :to => 'x' do
117
+ echo '${f:x}'
118
+ end
119
+ iterator :on_val => 'c, d', :to => 'f:y' do
120
+ echo '${f:y}'
121
+ end
122
+ iterator :on_val => 'e, f', :to => 'v:z' do
123
+ echo '${v:z}'
124
+ end
125
+ end
126
+
127
+ #@dashboard.noisy = true
128
+
129
+ wfid = @dashboard.launch(pdef)
130
+ @dashboard.wait_for(wfid)
131
+
132
+ assert_equal %w[ a b c d e f ], @tracer.to_a
133
+ end
134
+
98
135
  PDEF0 = Ruote.process_definition :name => 'test' do
99
136
  sequence do
100
137
  iterator :on_val => 'alice, bob, charly', :to_var => 'v' do
@@ -106,9 +143,9 @@ class EftIteratorTest < Test::Unit::TestCase
106
143
 
107
144
  def test_break
108
145
 
109
- @engine.register_participant '.*' do |workitem|
146
+ @dashboard.register_participant '.*' do |workitem|
110
147
 
111
- @tracer << "#{workitem.participant_name}\n"
148
+ tracer << "#{workitem.participant_name}\n"
112
149
 
113
150
  if workitem.participant_name == 'bob'
114
151
  workitem.fields['__command__'] = [ 'break', nil ]
@@ -124,12 +161,12 @@ class EftIteratorTest < Test::Unit::TestCase
124
161
 
125
162
  stash[:rewound] = false
126
163
 
127
- @engine.register_participant '.*' do |workitem|
164
+ @dashboard.register_participant '.*' do |workitem|
128
165
 
129
- @tracer << "#{workitem.participant_name}\n"
166
+ tracer << "#{workitem.participant_name}\n"
130
167
 
131
- if (not stash[:rewound]) and workitem.participant_name == 'bob'
132
- stash[:rewound] = true
168
+ if (not context.stash[:rewound]) and workitem.participant_name == 'bob'
169
+ context.stash[:rewound] = true
133
170
  workitem.fields['__command__'] = [ 'rewind', nil ]
134
171
  end
135
172
  end
@@ -141,9 +178,9 @@ class EftIteratorTest < Test::Unit::TestCase
141
178
 
142
179
  def test_skip
143
180
 
144
- @engine.register_participant '.*' do |workitem|
181
+ @dashboard.register_participant '.*' do |workitem|
145
182
 
146
- @tracer << "#{workitem.participant_name}\n"
183
+ tracer << "#{workitem.participant_name}\n"
147
184
 
148
185
  if workitem.participant_name == 'alice'
149
186
  workitem.fields['__command__'] = [ 'skip', 1 ]
@@ -157,9 +194,9 @@ class EftIteratorTest < Test::Unit::TestCase
157
194
 
158
195
  def test_jump
159
196
 
160
- @engine.register_participant '.*' do |workitem|
197
+ @dashboard.register_participant '.*' do |workitem|
161
198
 
162
- @tracer << "#{workitem.participant_name}\n"
199
+ tracer << "#{workitem.participant_name}\n"
163
200
 
164
201
  if workitem.participant_name == 'alice'
165
202
  workitem.fields['__command__'] = [ 'jump', -1 ]
@@ -182,8 +219,8 @@ class EftIteratorTest < Test::Unit::TestCase
182
219
  end
183
220
  end
184
221
 
185
- @engine.register_participant '.*' do |workitem|
186
- @tracer << "#{workitem.participant_name}/#{workitem.fei.expid}\n"
222
+ @dashboard.register_participant '.*' do |workitem|
223
+ tracer << "#{workitem.participant_name}/#{workitem.fei.expid}\n"
187
224
  end
188
225
 
189
226
  #noisy
@@ -199,8 +236,8 @@ class EftIteratorTest < Test::Unit::TestCase
199
236
  end
200
237
  end
201
238
 
202
- @engine.register_participant '.*' do |workitem|
203
- @tracer << "#{workitem.participant_name}/#{workitem.fei.expid}\n"
239
+ @dashboard.register_participant '.*' do |workitem|
240
+ tracer << "#{workitem.participant_name}/#{workitem.fei.expid}\n"
204
241
  end
205
242
 
206
243
  #noisy
@@ -217,8 +254,8 @@ class EftIteratorTest < Test::Unit::TestCase
217
254
  end
218
255
  end
219
256
 
220
- @engine.register_participant '.*' do |workitem|
221
- @tracer << "#{workitem.participant_name}/#{workitem.fei.expid}\n"
257
+ @dashboard.register_participant '.*' do |workitem|
258
+ tracer << "#{workitem.participant_name}/#{workitem.fei.expid}\n"
222
259
  end
223
260
 
224
261
  #noisy
@@ -234,9 +271,9 @@ class EftIteratorTest < Test::Unit::TestCase
234
271
  end
235
272
  end
236
273
 
237
- @engine.register_participant :p1 do |wi|
238
- @tracer << wi.fields['f'].join(':')
239
- @tracer << "\n"
274
+ @dashboard.register_participant :p1 do |wi|
275
+ tracer << wi.fields['f'].join(':')
276
+ tracer << "\n"
240
277
  end
241
278
 
242
279
  #noisy
@@ -252,13 +289,19 @@ class EftIteratorTest < Test::Unit::TestCase
252
289
  end
253
290
  end
254
291
 
255
- @engine.register_participant '.*' do |workitem|
256
- @tracer << "#{workitem.participant_name}/#{workitem.fei.expid}\n"
292
+ @dashboard.register_participant '.*' do |workitem|
293
+ tracer << "#{workitem.participant_name}/#{workitem.fei.expid}\n"
257
294
  end
258
295
 
259
- #noisy
296
+ #@dashboard.noisy = true
260
297
 
261
- assert_trace(%w[ alice:0/0_0_0 bob:1/0_0_0 charly:2/0_0_0 ], pdef)
298
+ wfid = @dashboard.launch(pdef)
299
+ r = @dashboard.wait_for(wfid)
300
+
301
+ assert_equal %w[ alice:0/0_0_0 bob:1/0_0_0 charly:2/0_0_0 ], @tracer.to_a
302
+
303
+ assert_equal 'charly', r['variables']['i']
304
+ assert_equal 2, r['variables']['ii']
262
305
  end
263
306
 
264
307
  def test_nested_break
@@ -301,5 +344,28 @@ class EftIteratorTest < Test::Unit::TestCase
301
344
 
302
345
  assert_trace %w[ 1 2 ], pdef
303
346
  end
347
+
348
+ def test_implicit_sequence
349
+
350
+ pdef = Ruote.process_definition :name => 'test' do
351
+ iterator :on_val => 'alice, bob, charly', :to_var => 'v' do
352
+ echo '0:${v:v}'
353
+ echo '1:${v:v}'
354
+ end
355
+ end
356
+
357
+ #@dashboard.noisy = true
358
+
359
+ wfid = @dashboard.launch(pdef)
360
+ r = @dashboard.wait_for(wfid)
361
+
362
+ assert_equal(
363
+ %w[
364
+ 0:alice 1:alice
365
+ 0:bob 1:bob
366
+ 0:charly 1:charly
367
+ ],
368
+ @tracer.to_a)
369
+ end
304
370
  end
305
371
 
@@ -5,7 +5,7 @@
5
5
  # Mon Jun 29 18:34:02 JST 2009
6
6
  #
7
7
 
8
- require File.join(File.dirname(__FILE__), 'base')
8
+ require File.expand_path('../base', __FILE__)
9
9
 
10
10
  require 'ruote/part/no_op_participant'
11
11
 
@@ -147,10 +147,10 @@ class EftCursorTest < Test::Unit::TestCase
147
147
  end
148
148
  end
149
149
 
150
- @engine.register_participant :alpha do |workitem|
150
+ @dashboard.register_participant :alpha do |workitem|
151
151
  workitem.fields['counter'] += 1
152
152
  workitem.fields['rewind'] = workitem.fields['counter'] < 5
153
- @tracer << "a\n"
153
+ tracer << "a\n"
154
154
  end
155
155
 
156
156
  #noisy
@@ -169,17 +169,17 @@ class EftCursorTest < Test::Unit::TestCase
169
169
  end
170
170
  end
171
171
 
172
- @engine.register_participant :author do |workitem|
173
- @tracer << "a\n"
174
- stash[:count] ||= 0
175
- stash[:count] += 1
172
+ @dashboard.register_participant :author do |workitem|
173
+ tracer << "a\n"
174
+ context.stash[:count] ||= 0
175
+ context.stash[:count] += 1
176
176
  end
177
- @engine.register_participant :reviewer do |workitem|
178
- @tracer << "r\n"
179
- workitem.fields['not_ok'] = (stash[:count] < 3)
177
+ @dashboard.register_participant :reviewer do |workitem|
178
+ tracer << "r\n"
179
+ workitem.fields['not_ok'] = (context.stash[:count] < 3)
180
180
  end
181
- @engine.register_participant :publisher do |workitem|
182
- @tracer << "p\n"
181
+ @dashboard.register_participant :publisher do |workitem|
182
+ tracer << "p\n"
183
183
  end
184
184
 
185
185
  #noisy
@@ -202,7 +202,7 @@ class EftCursorTest < Test::Unit::TestCase
202
202
 
203
203
  #noisy
204
204
 
205
- wfid = @engine.launch(pdef)
205
+ wfid = @dashboard.launch(pdef)
206
206
 
207
207
  wait_for(14)
208
208
 
@@ -226,11 +226,11 @@ class EftCursorTest < Test::Unit::TestCase
226
226
  end
227
227
  end
228
228
 
229
- @engine.register_participant :alpha, Ruote::NoOpParticipant
229
+ @dashboard.register_participant :alpha, Ruote::NoOpParticipant
230
230
 
231
231
  #noisy
232
232
 
233
- wfid = @engine.launch(pdef)
233
+ wfid = @dashboard.launch(pdef)
234
234
 
235
235
  wait_for(:alpha)
236
236
  wait_for(wfid)
@@ -238,7 +238,7 @@ class EftCursorTest < Test::Unit::TestCase
238
238
  #p @tracer.to_s
239
239
  assert_equal %w[ a a a ], @tracer.to_a[0, 3]
240
240
 
241
- assert_nil @engine.process(wfid)
241
+ assert_nil @dashboard.process(wfid)
242
242
  end
243
243
 
244
244
  def test_nested_break
@@ -319,7 +319,7 @@ class EftCursorTest < Test::Unit::TestCase
319
319
 
320
320
  #noisy
321
321
 
322
- @engine.register do
322
+ @dashboard.register do
323
323
  alpha EftCursorTest::Alpha
324
324
  bravo EftCursorTest::Bravo
325
325
  end
@@ -335,13 +335,13 @@ class EftCursorTest < Test::Unit::TestCase
335
335
  end
336
336
  end
337
337
 
338
- #@engine.noisy = true
338
+ #@dashboard.noisy = true
339
339
 
340
- wfid = @engine.launch(pdef)
340
+ wfid = @dashboard.launch(pdef)
341
341
 
342
- @engine.wait_for(9)
342
+ @dashboard.wait_for(9)
343
343
 
344
- assert_not_nil @engine.process(wfid)
344
+ assert_not_nil @dashboard.process(wfid)
345
345
  end
346
346
 
347
347
  class Charly
@@ -371,7 +371,7 @@ class EftCursorTest < Test::Unit::TestCase
371
371
 
372
372
  #noisy
373
373
 
374
- @engine.register do
374
+ @dashboard.register do
375
375
  charly EftCursorTest::Charly, 'command' => [ 'jump', 'delta' ]
376
376
  catchall Ruote::NoOpParticipant
377
377
  end
@@ -383,7 +383,7 @@ class EftCursorTest < Test::Unit::TestCase
383
383
 
384
384
  #noisy
385
385
 
386
- @engine.register do
386
+ @dashboard.register do
387
387
  charly EftCursorTest::Charly, 'command' => 'jump delta'
388
388
  catchall Ruote::NoOpParticipant
389
389
  end
@@ -395,12 +395,62 @@ class EftCursorTest < Test::Unit::TestCase
395
395
 
396
396
  #noisy
397
397
 
398
- @engine.register do
398
+ @dashboard.register do
399
399
  charly EftCursorTest::Charly, 'command' => 'jump to delta'
400
400
  catchall Ruote::NoOpParticipant
401
401
  end
402
402
 
403
403
  assert_trace "top\nbottom", JUMP_DEF
404
404
  end
405
+
406
+ def test_reset
407
+
408
+ pdef = Ruote.define do
409
+ cursor do
410
+ alpha
411
+ set 'f:toto' => 'oops'
412
+ reset
413
+ end
414
+ end
415
+
416
+ @dashboard.register { catchall }
417
+
418
+ #@dashboard.noisy = true
419
+
420
+ wfid = @dashboard.launch(pdef)
421
+ @dashboard.wait_for(:alpha)
422
+
423
+ assert_nil @dashboard.storage_participant.first.fields['toto']
424
+
425
+ @dashboard.storage_participant.proceed(@dashboard.storage_participant.first)
426
+ @dashboard.wait_for(:alpha)
427
+
428
+ assert_nil @dashboard.storage_participant.first.fields['toto']
429
+ end
430
+
431
+ def test_reset_if
432
+
433
+ pdef = Ruote.define do
434
+ cursor :reset_if => '${f:reset} == true' do
435
+ alpha
436
+ set 'f:toto' => 'oops'
437
+ set 'f:reset' => true
438
+ end
439
+ end
440
+
441
+ @dashboard.register { catchall }
442
+
443
+ #@dashboard.noisy = true
444
+
445
+ wfid = @dashboard.launch(pdef)
446
+ @dashboard.wait_for(:alpha)
447
+
448
+ assert_nil @dashboard.storage_participant.first.fields['toto']
449
+
450
+ @dashboard.storage_participant.proceed(@dashboard.storage_participant.first)
451
+ @dashboard.wait_for(:alpha)
452
+
453
+ assert_nil @dashboard.storage_participant.first.fields['toto']
454
+ end
405
455
  end
406
456
 
@@ -5,7 +5,7 @@
5
5
  # Mon Jun 29 22:29:15 JST 2009
6
6
  #
7
7
 
8
- require File.join(File.dirname(__FILE__), 'base')
8
+ require File.expand_path('../base', __FILE__)
9
9
 
10
10
 
11
11
  class EftLoopTest < Test::Unit::TestCase
@@ -22,16 +22,16 @@ class EftLoopTest < Test::Unit::TestCase
22
22
 
23
23
  #noisy
24
24
 
25
- @engine.register_participant :alpha do |workitem|
25
+ @dashboard.register_participant :alpha do |workitem|
26
26
 
27
- @tracer << "a\n"
27
+ tracer << "a\n"
28
28
  (workitem.fields['count'] ||= 0)
29
29
  workitem.fields['count'] += 1
30
30
  end
31
31
 
32
- @engine.register_participant :bravo do |workitem|
32
+ @dashboard.register_participant :bravo do |workitem|
33
33
 
34
- @tracer << "b\n"
34
+ tracer << "b\n"
35
35
  workitem.fields['count'] += 1
36
36
 
37
37
  if workitem.fields['count'] > 5
@@ -52,9 +52,9 @@ class EftLoopTest < Test::Unit::TestCase
52
52
 
53
53
  #noisy
54
54
 
55
- @engine.register_participant :alpha do |workitem|
55
+ @dashboard.register_participant :alpha do |workitem|
56
56
 
57
- @tracer << "a\n"
57
+ tracer << "a\n"
58
58
  (workitem.fields['count'] ||= 0)
59
59
  workitem.fields['count'] += 1
60
60