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 May 18 22:25:57 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'
11
11
 
@@ -15,12 +15,10 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
15
15
 
16
16
  def test_participant_register
17
17
 
18
- #noisy
19
-
20
- @engine.register_participant :alpha do |workitem|
21
- @tracer << 'alpha'
18
+ @dashboard.register_participant :alpha do |workitem|
19
+ tracer << 'alpha'
22
20
  end
23
- @engine.register_participant /^user_/, Ruote::NullParticipant
21
+ @dashboard.register_participant /^user_/, Ruote::NullParticipant
24
22
 
25
23
  wait_for(2)
26
24
 
@@ -33,57 +31,106 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
33
31
  logger.log.collect { |msg| msg['regex'] })
34
32
 
35
33
  assert_equal(
36
- [ [ "^alpha$",
37
- [ "Ruote::BlockParticipant",
38
- { "block" => "proc { |workitem| (@tracer << \"alpha\") }" } ] ],
39
- [ "^user_",
40
- [ "Ruote::NullParticipant",
34
+ [ [ '^alpha$',
35
+ [ 'Ruote::BlockParticipant',
36
+ { 'on_workitem' => "proc do |workitem|\n tracer << 'alpha'\n end" } ] ],
37
+ [ '^user_',
38
+ [ 'Ruote::NullParticipant',
41
39
  {} ] ] ],
42
- @engine.participant_list.collect { |pe| pe.to_a })
40
+ @dashboard.participant_list.collect { |pe| pe.to_a })
43
41
  end
44
42
 
45
43
  def test_participant_register_position
46
44
 
47
- @engine.register_participant :ur, Ruote::StorageParticipant
45
+ @dashboard.register_participant :ur, Ruote::StorageParticipant
48
46
 
49
47
  assert_equal(
50
48
  %w[ ^ur$ ],
51
- @engine.participant_list.collect { |pe| pe.regex.to_s })
49
+ @dashboard.participant_list.collect { |pe| pe.regex.to_s })
52
50
 
53
- @engine.register_participant(
51
+ @dashboard.register_participant(
54
52
  :first, Ruote::StorageParticipant, :position => :first)
55
- @engine.register_participant(
53
+ @dashboard.register_participant(
56
54
  :last, Ruote::StorageParticipant, :position => :last)
57
55
 
58
56
  assert_equal(
59
57
  %w[ ^first$ ^ur$ ^last$ ],
60
- @engine.participant_list.collect { |pe| pe.regex.to_s })
58
+ @dashboard.participant_list.collect { |pe| pe.regex.to_s })
61
59
 
62
- @engine.register_participant(
60
+ @dashboard.register_participant(
63
61
  :x, Ruote::StorageParticipant, :position => -2)
64
62
 
65
63
  assert_equal(
66
64
  %w[ ^first$ ^ur$ ^x$ ^last$ ],
67
- @engine.participant_list.collect { |pe| pe.regex.to_s })
65
+ @dashboard.participant_list.collect { |pe| pe.regex.to_s })
66
+ end
67
+
68
+ def test_participant_register_before
69
+
70
+ @dashboard.register_participant :alpha, 'AlphaParticipant'
71
+ @dashboard.register_participant :bravo, 'BravoParticipant'
72
+ @dashboard.register_participant :alpha, 'AlphaPrimeParticipant', :pos => :after
73
+
74
+ assert_equal(
75
+ [ %w[ ^alpha$ AlphaParticipant ],
76
+ %w[ ^alpha$ AlphaPrimeParticipant ],
77
+ %w[ ^bravo$ BravoParticipant ] ],
78
+ @dashboard.participant_list.collect { |e| [ e.regex, e.classname ] })
79
+ end
80
+
81
+ def test_participant_register_after
82
+
83
+ @dashboard.register_participant :alpha, 'AlphaParticipant'
84
+ @dashboard.register_participant :alpha, 'AlphaPrimeParticipant', :pos => :before
85
+
86
+ assert_equal(
87
+ [ %w[ ^alpha$ AlphaPrimeParticipant ],
88
+ %w[ ^alpha$ AlphaParticipant ] ],
89
+ @dashboard.participant_list.collect { |e| [ e.regex, e.classname ] })
90
+ end
91
+
92
+ def test_participant_register_before_after_corner_cases
93
+
94
+ @dashboard.register_participant :alpha, 'KlassA', :pos => :before
95
+ @dashboard.register_participant :bravo, 'KlassB', :pos => :after
96
+
97
+ assert_equal(
98
+ [ %w[ ^alpha$ KlassA ],
99
+ %w[ ^bravo$ KlassB ] ],
100
+ @dashboard.participant_list.collect { |e| [ e.regex, e.classname ] })
101
+ end
102
+
103
+ def test_participant_register_over
104
+
105
+ @dashboard.register_participant :alpha, 'KlassA'
106
+ @dashboard.register_participant :bravo, 'KlassB'
107
+ @dashboard.register_participant :alpha, 'KlassAa', :pos => :over
108
+ @dashboard.register_participant :charly, 'KlassC', :pos => :over
109
+
110
+ assert_equal(
111
+ [ %w[ ^alpha$ KlassAa ],
112
+ %w[ ^bravo$ KlassB ],
113
+ %w[ ^charly$ KlassC ] ],
114
+ @dashboard.participant_list.collect { |e| [ e.regex, e.classname ] })
68
115
  end
69
116
 
70
117
  def test_double_registration
71
118
 
72
- @engine.register_participant :alpha do |workitem|
73
- @tracer << 'alpha'
119
+ @dashboard.register_participant :alpha do |workitem|
120
+ tracer << 'alpha'
74
121
  end
75
- @engine.register_participant :alpha do |workitem|
76
- @tracer << 'alpha'
122
+ @dashboard.register_participant :alpha do |workitem|
123
+ tracer << 'alpha'
77
124
  end
78
125
 
79
- assert_equal 1, @engine.context.plist.send(:get_list)['list'].size
126
+ assert_equal 1, @dashboard.context.plist.send(:get_list)['list'].size
80
127
  end
81
128
 
82
129
  def test_register_and_return_something
83
130
 
84
- pa = @engine.register_participant :alpha do |workitem|
131
+ pa = @dashboard.register_participant :alpha do |workitem|
85
132
  end
86
- pb = @engine.register_participant :bravo, Ruote::StorageParticipant
133
+ pb = @dashboard.register_participant :bravo, Ruote::StorageParticipant
87
134
 
88
135
  assert_nil pa
89
136
  assert_equal Ruote::StorageParticipant, pb.class
@@ -91,12 +138,10 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
91
138
 
92
139
  def test_participant_unregister_by_name
93
140
 
94
- #noisy
95
-
96
- @engine.register_participant :alpha do |workitem|
141
+ @dashboard.register_participant :alpha do |workitem|
97
142
  end
98
143
 
99
- @engine.unregister_participant(:alpha)
144
+ @dashboard.unregister_participant(:alpha)
100
145
 
101
146
  wait_for(2)
102
147
  Thread.pass
@@ -108,10 +153,10 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
108
153
 
109
154
  def test_participant_unregister
110
155
 
111
- @engine.register_participant :alpha do |workitem|
156
+ @dashboard.register_participant :alpha do |workitem|
112
157
  end
113
158
 
114
- @engine.unregister_participant('alpha')
159
+ @dashboard.unregister_participant('alpha')
115
160
 
116
161
  wait_for(2)
117
162
 
@@ -119,7 +164,7 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
119
164
  assert_equal 'participant_unregistered', msg['action']
120
165
  assert_equal '^alpha$', msg['regex']
121
166
 
122
- assert_equal 0, @engine.context.plist.list.size
167
+ assert_equal 0, @dashboard.context.plist.list.size
123
168
  end
124
169
 
125
170
  class MyParticipant
@@ -136,25 +181,25 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
136
181
 
137
182
  def test_participant_shutdown
138
183
 
139
- alpha = @engine.register :alpha, MyParticipant
184
+ alpha = @dashboard.register :alpha, MyParticipant
140
185
 
141
- @engine.context.plist.shutdown
186
+ @dashboard.context.plist.shutdown
142
187
 
143
188
  assert_equal true, MyParticipant.down
144
189
  end
145
190
 
146
191
  def test_participant_list_of_names
147
192
 
148
- pa = @engine.register_participant :alpha do |workitem|
193
+ pa = @dashboard.register_participant :alpha do |workitem|
149
194
  end
150
195
 
151
- assert_equal [ '^alpha$' ], @engine.context.plist.names
196
+ assert_equal [ '^alpha$' ], @dashboard.context.plist.names
152
197
  end
153
198
 
154
199
  def test_register_require_path
155
200
 
156
- rpath = File.join(
157
- File.dirname(__FILE__), "#{Time.now.to_f}_#{$$}_required_participant")
201
+ rpath = File.expand_path(
202
+ "../#{Time.now.to_f}_#{$$}_required_participant", __FILE__)
158
203
  path = "#{rpath}.rb"
159
204
 
160
205
  File.open(path, 'wb') do |f|
@@ -172,22 +217,22 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
172
217
  })
173
218
  end
174
219
 
175
- @engine.register_participant(
220
+ @dashboard.register_participant(
176
221
  :alfred,
177
222
  'RequiredParticipant',
178
223
  :require_path => rpath, :message => 'hello')
179
224
 
180
- assert_equal [ '^alfred$' ], @engine.context.plist.names
225
+ assert_equal [ '^alfred$' ], @dashboard.context.plist.names
181
226
 
182
227
  # first run
183
228
 
184
229
  assert_equal(
185
230
  [ 'RequiredParticipant',
186
231
  { 'require_path' => rpath, 'message' => 'hello' } ],
187
- @engine.context.plist.lookup_info('alfred', nil))
232
+ @dashboard.context.plist.lookup_info('alfred', nil))
188
233
 
189
- wfid = @engine.launch(Ruote.define { alfred })
190
- r = @engine.wait_for(wfid)
234
+ wfid = @dashboard.launch(Ruote.define { alfred })
235
+ r = @dashboard.wait_for(wfid)
191
236
 
192
237
  assert_equal 'hello', r['workitem']['fields']['message']
193
238
 
@@ -208,8 +253,8 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
208
253
  })
209
254
  end
210
255
 
211
- wfid = @engine.launch(Ruote.define { alfred })
212
- r = @engine.wait_for(wfid)
256
+ wfid = @dashboard.launch(Ruote.define { alfred })
257
+ r = @dashboard.wait_for(wfid)
213
258
 
214
259
  # since it's a 'require', the code isn't reloaded
215
260
 
@@ -238,22 +283,22 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
238
283
  })
239
284
  end
240
285
 
241
- @engine.register_participant(
286
+ @dashboard.register_participant(
242
287
  :alfred,
243
288
  'LoadedParticipant',
244
289
  :load_path => path, :message => 'bondzoi')
245
290
 
246
- assert_equal [ '^alfred$' ], @engine.context.plist.names
291
+ assert_equal [ '^alfred$' ], @dashboard.context.plist.names
247
292
 
248
293
  # first run
249
294
 
250
295
  assert_equal(
251
296
  [ 'LoadedParticipant',
252
297
  { 'load_path' => path, 'message' => 'bondzoi' } ],
253
- @engine.context.plist.lookup_info('alfred', nil))
298
+ @dashboard.context.plist.lookup_info('alfred', nil))
254
299
 
255
- wfid = @engine.launch(Ruote.define { alfred })
256
- r = @engine.wait_for(wfid)
300
+ wfid = @dashboard.launch(Ruote.define { alfred })
301
+ r = @dashboard.wait_for(wfid)
257
302
 
258
303
  assert_equal 'bondzoi', r['workitem']['fields']['message']
259
304
 
@@ -274,8 +319,8 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
274
319
  })
275
320
  end
276
321
 
277
- wfid = @engine.launch(Ruote.define { alfred })
278
- r = @engine.wait_for(wfid)
322
+ wfid = @dashboard.launch(Ruote.define { alfred })
323
+ r = @dashboard.wait_for(wfid)
279
324
 
280
325
  # since it's a 'load', the code is reloaded
281
326
 
@@ -286,49 +331,59 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
286
331
 
287
332
  def test_participant_list
288
333
 
289
- #noisy
334
+ @dashboard.register_participant 'alpha', Ruote::StorageParticipant
290
335
 
291
- @engine.register_participant 'alpha', Ruote::StorageParticipant
336
+ #assert_equal(
337
+ # [ '/^alpha$/ ==> Ruote::StorageParticipant {}' ],
338
+ # @dashboard.participant_list.collect { |pe| pe.to_s })
292
339
 
293
- assert_equal(
294
- [ '/^alpha$/ ==> Ruote::StorageParticipant {}' ],
295
- @engine.participant_list.collect { |pe| pe.to_s })
340
+ plist = @dashboard.participant_list
341
+
342
+ assert_equal 1, plist.size
343
+ assert_equal '^alpha$', plist.first.regex
344
+ assert_equal 'Ruote::StorageParticipant', plist.first.classname
296
345
 
297
346
  # launching a process with a missing participant
298
347
 
299
- wfid = @engine.launch(Ruote.define { bravo })
300
- @engine.wait_for(wfid)
348
+ wfid = @dashboard.launch(Ruote.define { bravo })
349
+ @dashboard.wait_for(wfid)
301
350
 
302
- assert_equal 1, @engine.process(wfid).errors.size
351
+ assert_equal 1, @dashboard.process(wfid).errors.size
303
352
 
304
353
  # fixing the error by updating the participant list
305
354
 
306
- list = @engine.participant_list
355
+ list = @dashboard.participant_list
307
356
  list.first.regex = '^.+$' # instead of '^alpha$'
308
- @engine.participant_list = list
357
+ @dashboard.participant_list = list
309
358
 
310
359
  # replay at error
311
360
 
312
- @engine.replay_at_error(@engine.process(wfid).errors.first)
313
- @engine.wait_for(:bravo)
361
+ @dashboard.replay_at_error(@dashboard.process(wfid).errors.first)
362
+ @dashboard.wait_for(:bravo)
314
363
 
315
364
  # bravo should hold a workitem
316
365
 
317
- assert_equal 1, @engine.storage_participant.size
318
- assert_equal 'bravo', @engine.storage_participant.first.participant_name
366
+ assert_equal 1, @dashboard.storage_participant.size
367
+ assert_equal 'bravo', @dashboard.storage_participant.first.participant_name
319
368
  end
320
369
 
321
370
  def test_participant_list_update
322
371
 
323
- @engine.register_participant 'alpha', Ruote::StorageParticipant
372
+ @dashboard.register_participant 'alpha', Ruote::StorageParticipant
324
373
 
325
- assert_equal(
326
- [ '/^alpha$/ ==> Ruote::StorageParticipant {}' ],
327
- @engine.participant_list.collect { |pe| pe.to_s })
374
+ #assert_equal(
375
+ # [ '/^alpha$/ ==> Ruote::StorageParticipant {}' ],
376
+ # @dashboard.participant_list.collect { |pe| pe.to_s })
377
+
378
+ plist = @dashboard.participant_list
379
+
380
+ assert_equal 1, plist.size
381
+ assert_equal '^alpha$', plist.first.regex
382
+ assert_equal 'Ruote::StorageParticipant', plist.first.classname
328
383
 
329
384
  # 0
330
385
 
331
- @engine.participant_list = [
386
+ @dashboard.participant_list = [
332
387
  { 'regex' => '^bravo$',
333
388
  'classname' => 'Ruote::StorageParticipant',
334
389
  'options' => {} },
@@ -337,47 +392,57 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
337
392
  'options' => {} }
338
393
  ]
339
394
 
340
- assert_equal(
341
- [
342
- '/^bravo$/ ==> Ruote::StorageParticipant {}',
343
- '/^charly$/ ==> Ruote::StorageParticipant {}'
344
- ],
345
- @engine.participant_list.collect { |pe| pe.to_s })
395
+ #assert_equal(
396
+ # [
397
+ # '/^bravo$/ ==> Ruote::StorageParticipant {}',
398
+ # '/^charly$/ ==> Ruote::StorageParticipant {}'
399
+ # ],
400
+ # @dashboard.participant_list.collect { |pe| pe.to_s })
401
+
402
+ plist = @dashboard.participant_list
403
+
404
+ assert_equal 2, plist.size
405
+ assert_equal '^bravo$', plist.first.regex
406
+ assert_equal '^charly$', plist.last.regex
407
+ assert_equal 'Ruote::StorageParticipant', plist.first.classname
408
+ assert_equal 'Ruote::StorageParticipant', plist.last.classname
346
409
 
347
410
  # 1
348
411
 
349
- @engine.participant_list = [
412
+ @dashboard.participant_list = [
350
413
  [ '^charly$', [ 'Ruote::StorageParticipant', {} ] ],
351
414
  [ '^bravo$', [ 'Ruote::StorageParticipant', {} ] ]
352
415
  ]
353
416
 
354
- assert_equal(
355
- [
356
- '/^charly$/ ==> Ruote::StorageParticipant {}',
357
- '/^bravo$/ ==> Ruote::StorageParticipant {}'
358
- ],
359
- @engine.participant_list.collect { |pe| pe.to_s })
417
+ plist = @dashboard.participant_list
418
+
419
+ assert_equal 2, plist.size
420
+ assert_equal '^charly$', plist.first.regex
421
+ assert_equal '^bravo$', plist.last.regex
422
+ assert_equal 'Ruote::StorageParticipant', plist.first.classname
423
+ assert_equal 'Ruote::StorageParticipant', plist.last.classname
360
424
 
361
425
  # 2
362
426
 
363
- @engine.participant_list = [
427
+ @dashboard.participant_list = [
364
428
  [ '^delta$', Ruote::StorageParticipant, {} ],
365
429
  [ '^echo$', 'Ruote::StorageParticipant', {} ]
366
430
  ]
367
431
 
368
- assert_equal(
369
- [
370
- '/^delta$/ ==> Ruote::StorageParticipant {}',
371
- '/^echo$/ ==> Ruote::StorageParticipant {}'
372
- ],
373
- @engine.participant_list.collect { |pe| pe.to_s })
432
+ plist = @dashboard.participant_list
433
+
434
+ assert_equal 2, plist.size
435
+ assert_equal '^delta$', plist.first.regex
436
+ assert_equal '^echo$', plist.last.regex
437
+ assert_equal 'Ruote::StorageParticipant', plist.first.classname
438
+ assert_equal 'Ruote::StorageParticipant', plist.last.classname
374
439
  end
375
440
 
376
441
  class ParticipantCharlie; end
377
442
 
378
443
  def test_register_block
379
444
 
380
- @engine.register do
445
+ @dashboard.register do
381
446
  alpha 'Participants::Alpha', 'flavour' => 'vanilla'
382
447
  participant 'bravo', 'Participants::Bravo', :flavour => 'peach'
383
448
  participant 'charlie', 'Participants::Charlie'
@@ -387,11 +452,11 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
387
452
  catchall 'Participants::Zebda', 'flavour' => 'coconut'
388
453
  end
389
454
 
390
- assert_equal 5, @engine.participant_list.size
455
+ assert_equal 5, @dashboard.participant_list.size
391
456
 
392
457
  assert_equal(
393
458
  %w[ ^alpha$ ^bravo$ ^charlie$ ^david$ ^.+$ ],
394
- @engine.participant_list.collect { |pe| pe.regex.to_s })
459
+ @dashboard.participant_list.collect { |pe| pe.regex.to_s })
395
460
 
396
461
  assert_equal(
397
462
  %w[ Participants::Alpha
@@ -399,33 +464,96 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
399
464
  Participants::Charlie
400
465
  Ruote::BlockParticipant
401
466
  Participants::Zebda ],
402
- @engine.participant_list.collect { |pe| pe.classname })
467
+ @dashboard.participant_list.collect { |pe| pe.classname })
403
468
 
404
469
  assert_equal(
405
470
  %w[ vanilla peach nil nil coconut ],
406
- @engine.participant_list.collect { |pe|
471
+ @dashboard.participant_list.collect { |pe|
407
472
  (pe.options['flavour'] || 'nil') rescue 'nil'
408
473
  })
409
474
  end
410
475
 
476
+ def test_register_block_and_block
477
+
478
+ @dashboard.register do
479
+ alpha do |workitem|
480
+ a
481
+ end
482
+ participant 'bravo' do |workitem|
483
+ b
484
+ end
485
+ end
486
+
487
+ assert_equal(
488
+ [ [ 'on_workitem' ], [ 'on_workitem' ] ],
489
+ @dashboard.participant_list.collect { |pe| pe.options.keys })
490
+ end
491
+
411
492
  def test_register_block_catchall_default
412
493
 
413
- @engine.register do
494
+ @dashboard.register do
414
495
  catchall
415
496
  end
416
497
 
417
498
  assert_equal(
418
499
  %w[ Ruote::StorageParticipant ],
419
- @engine.participant_list.collect { |pe| pe.classname })
500
+ @dashboard.participant_list.collect { |pe| pe.classname })
501
+ end
502
+
503
+ def test_register_block_catch_all
504
+
505
+ @dashboard.register do
506
+ catch_all
507
+ end
508
+
509
+ assert_equal(
510
+ %w[ Ruote::StorageParticipant ],
511
+ @dashboard.participant_list.collect { |pe| pe.classname })
512
+ end
513
+
514
+ def test_register_block_override_false
515
+
516
+ @dashboard.register do
517
+ alpha 'KlassA'
518
+ alpha 'KlassB'
519
+ end
520
+
521
+ plist = @dashboard.participant_list
522
+
523
+ assert_equal(%w[ ^alpha$ ^alpha$ ], plist.collect { |pe| pe.regex })
524
+ assert_equal(%w[ KlassA KlassB ], plist.collect { |pe| pe.classname })
525
+ assert_equal({}, plist.first.options)
526
+ end
527
+
528
+ def test_register_block_clears
529
+
530
+ @dashboard.register 'alpha', 'AlphaParticipant'
531
+
532
+ @dashboard.register do
533
+ bravo 'BravoParticipant'
534
+ end
535
+
536
+ assert_equal 1, @dashboard.participant_list.size
537
+ end
538
+
539
+ def test_register_block_clear_option
540
+
541
+ @dashboard.register 'alpha', 'AlphaParticipant'
542
+
543
+ @dashboard.register :clear => false do
544
+ bravo 'BravoParticipant'
545
+ end
546
+
547
+ assert_equal 2, @dashboard.participant_list.size
420
548
  end
421
549
 
422
550
  def test_argument_error_on_instantiated_participant
423
551
 
424
552
  assert_raise ArgumentError do
425
- @engine.register 'alpha', Ruote::StorageParticipant.new
553
+ @dashboard.register 'alpha', Ruote::StorageParticipant.new
426
554
  end
427
555
  assert_raise ArgumentError do
428
- @engine.register 'alpha', Ruote::StorageParticipant.new, 'hello' => 'kitty'
556
+ @dashboard.register 'alpha', Ruote::StorageParticipant.new, 'hello' => 'kitty'
429
557
  end
430
558
  end
431
559
 
@@ -444,19 +572,19 @@ class FtParticipantRegistrationTest < Test::Unit::TestCase
444
572
 
445
573
  def test_engine_participant
446
574
 
447
- @engine.register do
575
+ @dashboard.register do
448
576
  alpha AaParticipant
449
577
  bravo BbParticipant
450
578
  catchall AaParticipant, :catch_all => 'oh yeah'
451
579
  end
452
580
 
453
- assert_equal AaParticipant, @engine.participant('alpha').class
454
- assert_equal BbParticipant, @engine.participant('bravo').class
581
+ assert_equal AaParticipant, @dashboard.participant('alpha').class
582
+ assert_equal BbParticipant, @dashboard.participant('bravo').class
455
583
 
456
- assert_equal AaParticipant, @engine.participant('charly').class
457
- assert_equal 'oh yeah', @engine.participant('charly').opts['catch_all']
584
+ assert_equal AaParticipant, @dashboard.participant('charly').class
585
+ assert_equal 'oh yeah', @dashboard.participant('charly').opts['catch_all']
458
586
 
459
- assert_equal Ruote::Context, @engine.participant('alpha').context.class
587
+ assert_equal Ruote::Context, @dashboard.participant('alpha').context.class
460
588
  end
461
589
  end
462
590