ruote 0.9.19 → 0.9.20

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 (401) hide show
  1. data/README.txt +16 -6
  2. data/examples/engine_template.rb +6 -43
  3. data/examples/quickstart.rb +87 -0
  4. data/examples/quotereporter.rb +42 -49
  5. data/examples/simple.rb +56 -0
  6. data/lib/openwfe.rb +20 -34
  7. data/lib/openwfe/contextual.rb +45 -36
  8. data/lib/openwfe/def.rb +21 -30
  9. data/lib/openwfe/engine.rb +17 -26
  10. data/lib/openwfe/engine/engine.rb +132 -397
  11. data/lib/openwfe/engine/expool_methods.rb +34 -122
  12. data/lib/openwfe/engine/file_persisted_engine.rb +39 -60
  13. data/lib/openwfe/engine/fs_engine.rb +54 -0
  14. data/lib/openwfe/engine/launch_methods.rb +245 -0
  15. data/lib/openwfe/engine/listener_methods.rb +128 -0
  16. data/lib/openwfe/engine/lookup_methods.rb +156 -0
  17. data/lib/openwfe/engine/participant_methods.rb +60 -52
  18. data/lib/openwfe/engine/status_methods.rb +102 -97
  19. data/lib/openwfe/engine/tc_engine.rb +55 -0
  20. data/lib/openwfe/engine/tt_engine.rb +55 -0
  21. data/lib/openwfe/engine/update_exp_methods.rb +46 -39
  22. data/lib/openwfe/expool/def_parser.rb +196 -0
  23. data/lib/openwfe/expool/errorjournal.rb +51 -219
  24. data/lib/openwfe/expool/errors.rb +69 -0
  25. data/lib/openwfe/expool/expool_pause_methods.rb +32 -43
  26. data/lib/openwfe/expool/expressionpool.rb +398 -594
  27. data/lib/openwfe/expool/expstorage.rb +68 -72
  28. data/lib/openwfe/expool/fs_expstorage.rb +302 -0
  29. data/lib/openwfe/expool/history.rb +54 -38
  30. data/lib/openwfe/expool/journal.rb +24 -38
  31. data/lib/openwfe/expool/journal_replay.rb +20 -36
  32. data/lib/openwfe/expool/representation.rb +62 -78
  33. data/lib/openwfe/expool/tc_expstorage.rb +239 -0
  34. data/lib/openwfe/expool/{threadedexpstorage.rb → threaded_expstorage.rb} +25 -53
  35. data/lib/openwfe/expool/tt_expstorage.rb +55 -0
  36. data/lib/openwfe/expool/wfidgen.rb +23 -43
  37. data/lib/openwfe/expool/yaml_errorjournal.rb +187 -0
  38. data/lib/openwfe/expressions/condition.rb +33 -58
  39. data/lib/openwfe/expressions/environment.rb +62 -76
  40. data/lib/openwfe/expressions/{expressionmap.rb → expression_map.rb} +40 -54
  41. data/lib/openwfe/expressions/expression_tree.rb +265 -0
  42. data/lib/openwfe/expressions/fe_cancel.rb +19 -39
  43. data/lib/openwfe/expressions/fe_command.rb +80 -84
  44. data/lib/openwfe/expressions/fe_concurrence.rb +250 -313
  45. data/lib/openwfe/expressions/fe_cron.rb +38 -55
  46. data/lib/openwfe/expressions/fe_cursor.rb +49 -74
  47. data/lib/openwfe/expressions/fe_define.rb +44 -90
  48. data/lib/openwfe/expressions/fe_do.rb +83 -70
  49. data/lib/openwfe/expressions/fe_equals.rb +17 -35
  50. data/lib/openwfe/expressions/fe_error.rb +103 -0
  51. data/lib/openwfe/expressions/fe_filter.rb +27 -44
  52. data/lib/openwfe/expressions/fe_filter_definition.rb +37 -54
  53. data/lib/openwfe/expressions/fe_fqv.rb +46 -65
  54. data/lib/openwfe/expressions/fe_http.rb +17 -31
  55. data/lib/openwfe/expressions/fe_if.rb +39 -55
  56. data/lib/openwfe/expressions/fe_iterator.rb +25 -42
  57. data/lib/openwfe/expressions/fe_listen.rb +71 -115
  58. data/lib/openwfe/expressions/fe_losfor.rb +34 -43
  59. data/lib/openwfe/expressions/fe_misc.rb +70 -109
  60. data/lib/openwfe/expressions/fe_participant.rb +61 -99
  61. data/lib/openwfe/expressions/fe_reserve.rb +28 -59
  62. data/lib/openwfe/expressions/fe_save.rb +62 -81
  63. data/lib/openwfe/expressions/fe_sequence.rb +45 -70
  64. data/lib/openwfe/expressions/fe_set.rb +22 -40
  65. data/lib/openwfe/expressions/fe_step.rb +22 -37
  66. data/lib/openwfe/expressions/fe_subprocess.rb +34 -55
  67. data/lib/openwfe/expressions/fe_timeout.rb +28 -44
  68. data/lib/openwfe/expressions/fe_wait.rb +142 -36
  69. data/lib/openwfe/expressions/fe_when.rb +22 -46
  70. data/lib/openwfe/expressions/filter.rb +24 -43
  71. data/lib/openwfe/expressions/flowexpression.rb +211 -192
  72. data/lib/openwfe/expressions/iterator.rb +24 -39
  73. data/lib/openwfe/expressions/merge.rb +30 -52
  74. data/lib/openwfe/expressions/raw.rb +168 -384
  75. data/lib/openwfe/expressions/rprocdef.rb +79 -76
  76. data/lib/openwfe/expressions/time.rb +89 -103
  77. data/lib/openwfe/expressions/timeout.rb +98 -92
  78. data/lib/openwfe/expressions/value.rb +43 -69
  79. data/lib/openwfe/extras/engine/ar_engine.rb +58 -0
  80. data/lib/openwfe/extras/engine/db_persisted_engine.rb +37 -57
  81. data/lib/openwfe/extras/engine/dm_engine.rb +59 -0
  82. data/lib/openwfe/extras/expool/ar_expstorage.rb +337 -0
  83. data/lib/openwfe/extras/expool/db_errorjournal.rb +165 -0
  84. data/lib/openwfe/extras/expool/db_expstorage.rb +73 -0
  85. data/lib/openwfe/extras/expool/db_history.rb +163 -0
  86. data/lib/openwfe/extras/expool/dm_expstorage.rb +327 -0
  87. data/lib/openwfe/extras/listeners/jabber_listeners.rb +102 -0
  88. data/lib/openwfe/extras/listeners/jabberlisteners.rb +26 -0
  89. data/lib/openwfe/extras/listeners/sqs_listeners.rb +128 -0
  90. data/lib/openwfe/extras/misc/activityfeed.rb +19 -34
  91. data/lib/openwfe/extras/misc/jabber_common.rb +122 -0
  92. data/lib/openwfe/extras/participants/active_participants.rb +724 -0
  93. data/lib/openwfe/extras/participants/active_resource_participants.rb +213 -0
  94. data/lib/openwfe/extras/participants/activeparticipants.rb +1 -747
  95. data/lib/openwfe/extras/participants/ar_participants.rb +285 -0
  96. data/lib/openwfe/extras/participants/atomfeed_participants.rb +19 -34
  97. data/lib/openwfe/extras/participants/atompub_participants.rb +19 -34
  98. data/lib/openwfe/extras/participants/basecamp_participants.rb +17 -31
  99. data/lib/openwfe/extras/participants/{csvparticipants.rb → decision_participants.rb} +17 -31
  100. data/lib/openwfe/extras/participants/jabber_participants.rb +147 -0
  101. data/lib/openwfe/extras/participants/jabberparticipants.rb +3 -0
  102. data/lib/openwfe/extras/participants/sqs_participants.rb +108 -0
  103. data/lib/openwfe/extras/participants/{twitterparticipants.rb → twitter_participants.rb} +20 -34
  104. data/lib/openwfe/extras/singlecon.rb +56 -0
  105. data/lib/openwfe/filterdef.rb +83 -65
  106. data/lib/openwfe/flowexpressionid.rb +99 -62
  107. data/lib/openwfe/listeners/listener.rb +54 -65
  108. data/lib/openwfe/listeners/listeners.rb +52 -56
  109. data/lib/openwfe/logging.rb +17 -31
  110. data/lib/openwfe/omixins.rb +25 -58
  111. data/lib/openwfe/participants.rb +1 -34
  112. data/lib/openwfe/participants/{enoparticipants.rb → mail_participants.rb} +33 -47
  113. data/lib/openwfe/participants/participant.rb +37 -36
  114. data/lib/openwfe/participants/participant_map.rb +245 -0
  115. data/lib/openwfe/participants/participants.rb +43 -69
  116. data/lib/openwfe/participants/{soapparticipants.rb → soap_participants.rb} +22 -36
  117. data/lib/openwfe/participants/{storeparticipants.rb → store_participants.rb} +57 -62
  118. data/lib/openwfe/{storage/yamlfilestorage.rb → participants/yaml_filestorage.rb} +35 -64
  119. data/lib/openwfe/representations.rb +770 -0
  120. data/lib/openwfe/rudefinitions.rb +17 -29
  121. data/lib/openwfe/service.rb +21 -32
  122. data/lib/openwfe/tools/flowtracer.rb +21 -35
  123. data/lib/openwfe/util/dollar.rb +48 -61
  124. data/lib/openwfe/util/irb.rb +19 -34
  125. data/lib/openwfe/util/json.rb +55 -0
  126. data/lib/openwfe/util/observable.rb +22 -41
  127. data/lib/openwfe/util/ometa.rb +21 -35
  128. data/lib/openwfe/util/treechecker.rb +17 -31
  129. data/lib/openwfe/util/workqueue.rb +45 -44
  130. data/lib/openwfe/util/xml.rb +80 -234
  131. data/lib/openwfe/utils.rb +67 -110
  132. data/lib/openwfe/version.rb +19 -27
  133. data/lib/openwfe/workitem.rb +119 -84
  134. data/lib/openwfe/worklist/storelocks.rb +17 -33
  135. data/lib/openwfe/worklist/storeparticipant.rb +1 -39
  136. data/lib/openwfe/worklist/worklist.rb +17 -31
  137. data/lib/pooltool.ru +311 -0
  138. data/test/{extras/active_connection.rb → ar_test_connection.rb} +26 -11
  139. data/test/bm/fatxml.rb +70 -0
  140. data/test/bm/load_26c.rb +79 -0
  141. data/test/dm_test_connection.rb +11 -0
  142. data/test/extras/base.rb +3 -0
  143. data/test/extras/et_0_sqs.rb +37 -0
  144. data/test/extras/et_jabber_test.rb +226 -0
  145. data/test/extras/test.rb +16 -0
  146. data/test/functional/base.rb +198 -0
  147. data/test/functional/db_ft_0_ar_participants.rb +136 -0
  148. data/test/functional/eft_0_process_definition.rb +34 -0
  149. data/test/functional/eft_10_unset.rb +60 -0
  150. data/test/functional/eft_11_sleep.rb +95 -0
  151. data/test/functional/eft_12_wait.rb +57 -0
  152. data/test/functional/eft_13_cursor.rb +139 -0
  153. data/test/functional/eft_14_loop.rb +36 -0
  154. data/test/functional/eft_15_undo.rb +77 -0
  155. data/test/functional/eft_16_redo.rb +88 -0
  156. data/test/functional/eft_1_print.rb +57 -0
  157. data/test/functional/eft_2_sequence.rb +47 -0
  158. data/test/functional/eft_3_equals.rb +98 -0
  159. data/test/functional/eft_4_if.rb +96 -0
  160. data/test/functional/eft_5_eval.rb +89 -0
  161. data/test/functional/eft_6_reval.rb +101 -0
  162. data/test/functional/eft_7_exp.rb +47 -0
  163. data/test/functional/eft_8_log.rb +50 -0
  164. data/test/functional/eft_9_set.rb +132 -0
  165. data/test/functional/engine_helper.rb +122 -0
  166. data/test/functional/ft_0_vars_at_launch.rb +27 -0
  167. data/test/functional/ft_1_process_status.rb +46 -0
  168. data/test/functional/ft_2_file_listener.rb +45 -0
  169. data/test/functional/ft_3_on_cancel.rb +171 -0
  170. data/test/functional/ft_4_on_error.rb +220 -0
  171. data/test/functional/ft_5_process_uri.rb +82 -0
  172. data/test/functional/ft_6_process_status.rb +62 -0
  173. data/test/functional/ft_7_parameters.rb +103 -0
  174. data/test/functional/ft_8_dollar.rb +53 -0
  175. data/test/functional/ft_9_register_participants.rb +119 -0
  176. data/test/functional/restart_base.rb +43 -0
  177. data/test/functional/rft_0_sleep.rb +76 -0
  178. data/test/functional/test.rb +24 -0
  179. data/test/path_helper.rb +12 -0
  180. data/test/test.rb +11 -1
  181. data/test/{rutest_utils.rb → test_helper.rb} +8 -31
  182. data/test/unit/test.rb +19 -0
  183. data/test/{fei_test.rb → unit/ut_0_fei.rb} +34 -49
  184. data/test/unit/ut_10_lookup_attribute.rb +86 -0
  185. data/test/unit/ut_11_filter.rb +124 -0
  186. data/test/{condition_test.rb → unit/ut_12_conditional.rb} +33 -40
  187. data/test/unit/ut_13_xmlutil.rb +57 -0
  188. data/test/unit/ut_14_var_field_lookup.rb +85 -0
  189. data/test/{fe_lookup_att_test.rb → unit/ut_15_fe_att_lookup.rb} +14 -21
  190. data/test/{storage_test.rb → unit/ut_16_expstorage_findexp.rb} +3 -9
  191. data/test/unit/ut_17_representations.rb +330 -0
  192. data/test/{hash_test.rb → unit/ut_17b_representations_hash.rb} +25 -21
  193. data/test/{slock_test.rb → unit/ut_18_store_lock.rb} +17 -20
  194. data/test/{wfid_test.rb → unit/ut_1_wfid.rb} +2 -73
  195. data/test/unit/ut_2_utils.rb +53 -0
  196. data/test/unit/ut_3_expmap.rb +65 -0
  197. data/test/{clone_test.rb → unit/ut_4_fulldup.rb} +41 -46
  198. data/test/{obs_test.rb → unit/ut_5_observable.rb} +9 -19
  199. data/test/unit/ut_6_treechecker.rb +101 -0
  200. data/test/unit/ut_7_parser_ruby.rb +344 -0
  201. data/test/unit/ut_7b_parser_ruby.rb +56 -0
  202. data/test/{description_test.rb → unit/ut_8_parser_description.rb} +8 -19
  203. data/test/unit/ut_9_workitem.rb +72 -0
  204. metadata +117 -234
  205. data/lib/openwfe/exceptions.rb +0 -51
  206. data/lib/openwfe/expool/parser.rb +0 -278
  207. data/lib/openwfe/expool/paused_error.rb +0 -77
  208. data/lib/openwfe/expool/yamlexpstorage.rb +0 -224
  209. data/lib/openwfe/expressions/fe_sleep.rb +0 -173
  210. data/lib/openwfe/extras/expool/dberrorjournal.rb +0 -189
  211. data/lib/openwfe/extras/expool/dbexpstorage.rb +0 -355
  212. data/lib/openwfe/extras/expool/dbhistory.rb +0 -135
  213. data/lib/openwfe/extras/listeners/sqslisteners.rb +0 -146
  214. data/lib/openwfe/extras/participants/sqsparticipants.rb +0 -125
  215. data/lib/openwfe/listeners/socketlisteners.rb +0 -272
  216. data/lib/openwfe/orest/definitions.rb +0 -113
  217. data/lib/openwfe/orest/osocket.rb +0 -148
  218. data/lib/openwfe/orest/xmlcodec.rb +0 -682
  219. data/lib/openwfe/participants/participantmap.rb +0 -249
  220. data/lib/openwfe/participants/socketparticipants.rb +0 -202
  221. data/lib/openwfe/storage/yamlcustom.rb +0 -106
  222. data/lib/openwfe/worklist/oldrest.rb +0 -244
  223. data/test/README.txt +0 -27
  224. data/test/back_0916_test.rb +0 -109
  225. data/test/bm/bm_1_xml_vs_prog.rb +0 -59
  226. data/test/bm/bm_2_step.rb +0 -109
  227. data/test/bm/ft_0f_5ms.rb +0 -35
  228. data/test/bm/ft_26_load.rb +0 -208
  229. data/test/bm/ft_26b_load.rb +0 -84
  230. data/test/bm/ft_26c_load.rb +0 -102
  231. data/test/bm/ft_recu.rb +0 -71
  232. data/test/concurrence_test.rb +0 -77
  233. data/test/console_test.rb +0 -12
  234. data/test/cron_ltest.rb +0 -15
  235. data/test/eno_test.rb +0 -76
  236. data/test/expmap_test.rb +0 -54
  237. data/test/expool_20031219_0916.tgz +0 -0
  238. data/test/extras/README.txt +0 -5
  239. data/test/extras/active_with_engine_test.rb +0 -140
  240. data/test/extras/activityfeed_test.rb +0 -85
  241. data/test/extras/ap_0_test.rb +0 -287
  242. data/test/extras/ap_1_test.rb +0 -53
  243. data/test/extras/ap_test_base.rb +0 -24
  244. data/test/extras/atomfeedp_test.rb +0 -113
  245. data/test/extras/atompubp_test.rb +0 -91
  246. data/test/extras/basecamp_test.rb +0 -53
  247. data/test/extras/db_errorjournal_utest.rb +0 -75
  248. data/test/extras/db_expstorage_utest.rb +0 -171
  249. data/test/extras/db_history_0_test.rb +0 -58
  250. data/test/extras/ft_19_csv.rb +0 -58
  251. data/test/extras/ft_71_b14008.rb +0 -85
  252. data/test/extras/sqs_test.rb +0 -57
  253. data/test/extras/twitter_test.rb +0 -62
  254. data/test/file_persisted_engine_test.rb +0 -64
  255. data/test/file_persistence_test.rb +0 -135
  256. data/test/filep_cancel_test.rb +0 -123
  257. data/test/filter_test.rb +0 -109
  258. data/test/flowtestbase.rb +0 -339
  259. data/test/ft_0.rb +0 -68
  260. data/test/ft_0b_sequence.rb +0 -36
  261. data/test/ft_0c_testname.rb +0 -33
  262. data/test/ft_0d_participant.rb +0 -30
  263. data/test/ft_0e_multibody.rb +0 -34
  264. data/test/ft_10_loop.rb +0 -133
  265. data/test/ft_11_ppd.rb +0 -411
  266. data/test/ft_11b_ppd.rb +0 -54
  267. data/test/ft_12_blockparticipant.rb +0 -97
  268. data/test/ft_13_eno.rb +0 -52
  269. data/test/ft_14_subprocess.rb +0 -88
  270. data/test/ft_14b_subprocess.rb +0 -192
  271. data/test/ft_14c_subprocess.rb +0 -68
  272. data/test/ft_15_iterator.rb +0 -216
  273. data/test/ft_15b_iterator.rb +0 -74
  274. data/test/ft_16_fqv.rb +0 -73
  275. data/test/ft_17_condition.rb +0 -84
  276. data/test/ft_18_pname.rb +0 -56
  277. data/test/ft_1_unset.rb +0 -175
  278. data/test/ft_1b_unset.rb +0 -39
  279. data/test/ft_20_cron.rb +0 -53
  280. data/test/ft_21_cron.rb +0 -87
  281. data/test/ft_21b_cron_pause.rb +0 -82
  282. data/test/ft_22_history.rb +0 -78
  283. data/test/ft_23_when.rb +0 -77
  284. data/test/ft_23b_when.rb +0 -70
  285. data/test/ft_23c_wait.rb +0 -80
  286. data/test/ft_23d_cww.rb +0 -58
  287. data/test/ft_24_def.rb +0 -44
  288. data/test/ft_25_cancel.rb +0 -92
  289. data/test/ft_27_getflowpos.rb +0 -143
  290. data/test/ft_28_fileparticipant.rb +0 -63
  291. data/test/ft_29_httprb.rb +0 -106
  292. data/test/ft_2_concurrence.rb +0 -137
  293. data/test/ft_2b_concurrence.rb +0 -188
  294. data/test/ft_2c_concurrence.rb +0 -64
  295. data/test/ft_30_socketlistener.rb +0 -203
  296. data/test/ft_31_flowname.rb +0 -39
  297. data/test/ft_32_journal.rb +0 -91
  298. data/test/ft_32c_journal.rb +0 -102
  299. data/test/ft_32d_journal.rb +0 -81
  300. data/test/ft_33_description.rb +0 -107
  301. data/test/ft_34_cancelwfid.rb +0 -80
  302. data/test/ft_35_localdefs.rb +0 -77
  303. data/test/ft_36_subprocids.rb +0 -97
  304. data/test/ft_37_pnames.rb +0 -70
  305. data/test/ft_38_tag.rb +0 -127
  306. data/test/ft_38b_tag.rb +0 -161
  307. data/test/ft_38c_tag.rb +0 -100
  308. data/test/ft_38d_tag.rb +0 -53
  309. data/test/ft_39_reserve.rb +0 -63
  310. data/test/ft_39b_reserve.rb +0 -84
  311. data/test/ft_3_equals.rb +0 -170
  312. data/test/ft_3b_lookup_vf.rb +0 -83
  313. data/test/ft_40_defined.rb +0 -61
  314. data/test/ft_41_case.rb +0 -110
  315. data/test/ft_42_environments.rb +0 -75
  316. data/test/ft_43_pat10.rb +0 -85
  317. data/test/ft_44_save.rb +0 -70
  318. data/test/ft_44b_restore.rb +0 -212
  319. data/test/ft_45_citerator.rb +0 -214
  320. data/test/ft_45b_citerator.rb +0 -77
  321. data/test/ft_46_pparams.rb +0 -62
  322. data/test/ft_47_filter.rb +0 -160
  323. data/test/ft_48_fe_filter.rb +0 -88
  324. data/test/ft_49_condition.rb +0 -133
  325. data/test/ft_4_misc.rb +0 -232
  326. data/test/ft_50_xml_attribute.rb +0 -152
  327. data/test/ft_51_stack.rb +0 -55
  328. data/test/ft_52_obs_participant.rb +0 -123
  329. data/test/ft_53_null_noop_participant.rb +0 -62
  330. data/test/ft_54_listen.rb +0 -288
  331. data/test/ft_54b_listen.rb +0 -66
  332. data/test/ft_54c_listen.rb +0 -99
  333. data/test/ft_55_ptimeout.rb +0 -58
  334. data/test/ft_56_timeout.rb +0 -59
  335. data/test/ft_57_a.rb +0 -148
  336. data/test/ft_58_ejournal.rb +0 -154
  337. data/test/ft_58b_ejournal.rb +0 -82
  338. data/test/ft_59_ps.rb +0 -212
  339. data/test/ft_5_time.rb +0 -118
  340. data/test/ft_60_ecancel.rb +0 -161
  341. data/test/ft_61_elsub.rb +0 -51
  342. data/test/ft_62_procparticipant.rb +0 -71
  343. data/test/ft_63_pause.rb +0 -137
  344. data/test/ft_64_alias.rb +0 -101
  345. data/test/ft_65_stringlaunch.rb +0 -59
  346. data/test/ft_66_subforget.rb +0 -70
  347. data/test/ft_67_schedlaunch.rb +0 -115
  348. data/test/ft_68_ifparticipant.rb +0 -70
  349. data/test/ft_69_cancelmissing.rb +0 -53
  350. data/test/ft_6_lambda.rb +0 -64
  351. data/test/ft_70_lookupvar.rb +0 -55
  352. data/test/ft_71_log.rb +0 -60
  353. data/test/ft_72_lookup_processes.rb +0 -79
  354. data/test/ft_73_cancel_sub.rb +0 -139
  355. data/test/ft_74_block_and_workitem_dup.rb +0 -63
  356. data/test/ft_75_ruby_attributes.rb +0 -89
  357. data/test/ft_76_merge_isolate.rb +0 -88
  358. data/test/ft_77_segments.rb +0 -35
  359. data/test/ft_78_eval.rb +0 -150
  360. data/test/ft_79_tticket.rb +0 -187
  361. data/test/ft_79b_tticket.rb +0 -172
  362. data/test/ft_79c_outcome.rb +0 -56
  363. data/test/ft_7_lose.rb +0 -104
  364. data/test/ft_7b_lose.rb +0 -78
  365. data/test/ft_80_spname.rb +0 -91
  366. data/test/ft_81_exp.rb +0 -60
  367. data/test/ft_82_trecu.rb +0 -52
  368. data/test/ft_83_badpause.rb +0 -58
  369. data/test/ft_84_updateexp.rb +0 -198
  370. data/test/ft_84b_subrepr.rb +0 -72
  371. data/test/ft_85_dolhash.rb +0 -43
  372. data/test/ft_86_dollar_fv.rb +0 -68
  373. data/test/ft_87_define.rb +0 -74
  374. data/test/ft_88_http.rb +0 -100
  375. data/test/ft_8_forget.rb +0 -44
  376. data/test/ft_9_cursor.rb +0 -154
  377. data/test/ft_9b_cursor.rb +0 -105
  378. data/test/ft_tests.rb +0 -130
  379. data/test/hparticipant_test.rb +0 -168
  380. data/test/lookup_att_test.rb +0 -90
  381. data/test/lookup_vf_test.rb +0 -94
  382. data/test/misc_test.rb +0 -94
  383. data/test/nut_0_irb.rb +0 -20
  384. data/test/param_test.rb +0 -290
  385. data/test/participant_test.rb +0 -101
  386. data/test/pending.rb +0 -23
  387. data/test/ps_representation.rb +0 -133
  388. data/test/rake_ltest.rb +0 -38
  389. data/test/rake_qtest.rb +0 -68
  390. data/test/raw_prog_test.rb +0 -407
  391. data/test/restart_cron_test.rb +0 -136
  392. data/test/restart_paused_test.rb +0 -103
  393. data/test/restart_sleep_test.rb +0 -140
  394. data/test/restart_tests.rb +0 -18
  395. data/test/restart_when_test.rb +0 -112
  396. data/test/ruby_procdef_test.rb +0 -132
  397. data/test/sec_test.rb +0 -206
  398. data/test/timeout_test.rb +0 -105
  399. data/test/treechecker_test.rb +0 -111
  400. data/test/util_xml_test.rb +0 -112
  401. data/test/wi_test.rb +0 -75
@@ -1,41 +1,26 @@
1
- #
2
1
  #--
3
- # Copyright (c) 2007-2008, John Mettraux, OpenWFE.org
4
- # All rights reserved.
5
- #
6
- # Redistribution and use in source and binary forms, with or without
7
- # modification, are permitted provided that the following conditions are met:
2
+ # Copyright (c) 2007-2009, John Mettraux, jmettraux@gmail.com
8
3
  #
9
- # . Redistributions of source code must retain the above copyright notice, this
10
- # list of conditions and the following disclaimer.
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:
11
10
  #
12
- # . Redistributions in binary form must reproduce the above copyright notice,
13
- # this list of conditions and the following disclaimer in the documentation
14
- # and/or other materials provided with the distribution.
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
15
13
  #
16
- # . Neither the name of the "OpenWFE" nor the names of its contributors may be
17
- # used to endorse or promote products derived from this software without
18
- # specific prior written permission.
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.
19
21
  #
20
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
- # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
- # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23
- # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24
- # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25
- # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26
- # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
- # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28
- # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29
- # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30
- # POSSIBILITY OF SUCH DAMAGE.
22
+ # Made in Japan.
31
23
  #++
32
- #
33
-
34
- #
35
- # "made in Japan"
36
- #
37
- # John Mettraux at openwfe.org
38
- #
39
24
 
40
25
 
41
26
  module OpenWFE
@@ -47,8 +32,8 @@ module OpenWFE
47
32
  #
48
33
  class Iterator
49
34
 
50
- ITERATOR_COUNT = "__ic__"
51
- ITERATOR_POSITION = "__ip__"
35
+ ITERATOR_COUNT = '__ic__'
36
+ ITERATOR_POSITION = '__ip__'
52
37
 
53
38
  attr_accessor :iteration_index
54
39
  attr_accessor :iteration_list
@@ -113,7 +98,7 @@ module OpenWFE
113
98
  #
114
99
  def next (workitem)
115
100
 
116
- position_at workitem, @iteration_index
101
+ position_at(workitem, @iteration_index)
117
102
  end
118
103
 
119
104
  #
@@ -121,7 +106,7 @@ module OpenWFE
121
106
  #
122
107
  def rewind (workitem)
123
108
 
124
- position_at workitem, 0
109
+ position_at(workitem, 0)
125
110
  end
126
111
 
127
112
  #
@@ -137,7 +122,7 @@ module OpenWFE
137
122
  index
138
123
  end
139
124
 
140
- position_at workitem, index
125
+ position_at(workitem, index)
141
126
  end
142
127
 
143
128
  #
@@ -145,7 +130,7 @@ module OpenWFE
145
130
  #
146
131
  def skip (workitem, offset)
147
132
 
148
- jump workitem, @iteration_index + offset
133
+ jump(workitem, @iteration_index + offset)
149
134
  end
150
135
 
151
136
  #
@@ -168,7 +153,7 @@ module OpenWFE
168
153
 
169
154
  value = @iteration_list[position]
170
155
 
171
- return nil unless value
156
+ return nil if (value == nil)
172
157
 
173
158
  if @to_field
174
159
  workitem.attributes[@to_field] = value
@@ -1,41 +1,27 @@
1
- #
2
1
  #--
3
- # Copyright (c) 2007-2008, John Mettraux, OpenWFE.org
4
- # All rights reserved.
5
- #
6
- # Redistribution and use in source and binary forms, with or without
7
- # modification, are permitted provided that the following conditions are met:
8
- #
9
- # . Redistributions of source code must retain the above copyright notice, this
10
- # list of conditions and the following disclaimer.
11
- #
12
- # . Redistributions in binary form must reproduce the above copyright notice,
13
- # this list of conditions and the following disclaimer in the documentation
14
- # and/or other materials provided with the distribution.
15
- #
16
- # . Neither the name of the "OpenWFE" nor the names of its contributors may be
17
- # used to endorse or promote products derived from this software without
18
- # specific prior written permission.
19
- #
20
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
- # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
- # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23
- # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24
- # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25
- # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26
- # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
- # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28
- # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29
- # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30
- # POSSIBILITY OF SUCH DAMAGE.
2
+ # Copyright (c) 2007-2009, 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
+ #
22
+ # Made in Japan.
31
23
  #++
32
- #
33
24
 
34
- #
35
- # "made in Japan"
36
- #
37
- # John Mettraux at openwfe.org
38
- #
39
25
 
40
26
  require 'openwfe/utils'
41
27
 
@@ -53,30 +39,22 @@ module OpenWFE
53
39
  #
54
40
  # Returns the resulting (merged) workitem.
55
41
  #
56
- def merge_workitems (wiTarget, wiSource, override=false)
42
+ def merge_workitems (wi_target, wi_source, override=false)
57
43
 
58
- return wiSource unless wiTarget
59
- return wiTarget unless wiSource
44
+ return wi_source unless wi_target
45
+ return wi_target unless wi_source
60
46
 
61
- return wiSource if override
47
+ return wi_source if override
62
48
 
63
- #puts "merge()"
64
- #puts "merge() source : " + wiSource.attributes.inspect
65
- #puts "merge() target : " + wiTarget.attributes.inspect
49
+ wi_source.attributes.each do |k, v|
66
50
 
67
- wiSource.attributes.each do |k, v|
51
+ nk = OpenWFE.fulldup(k)
52
+ nv = OpenWFE.fulldup(v)
68
53
 
69
- #puts "merge() '#{k}' => '#{v}'"
70
-
71
- nk = OpenWFE::fulldup k
72
- nv = OpenWFE::fulldup v
73
-
74
- wiTarget.attributes[nk] = nv
54
+ wi_target.attributes[nk] = nv
75
55
  end
76
56
 
77
- #puts "merge() target after : " + wiTarget.attributes.inspect
78
-
79
- wiTarget
57
+ wi_target
80
58
  end
81
59
  end
82
60
 
@@ -1,45 +1,30 @@
1
- #
2
1
  #--
3
- # Copyright (c) 2006-2008, John Mettraux, OpenWFE.org
4
- # All rights reserved.
5
- #
6
- # Redistribution and use in source and binary forms, with or without
7
- # modification, are permitted provided that the following conditions are met:
2
+ # Copyright (c) 2006-2009, John Mettraux, jmettraux@gmail.com
8
3
  #
9
- # . Redistributions of source code must retain the above copyright notice, this
10
- # list of conditions and the following disclaimer.
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:
11
10
  #
12
- # . Redistributions in binary form must reproduce the above copyright notice,
13
- # this list of conditions and the following disclaimer in the documentation
14
- # and/or other materials provided with the distribution.
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
15
13
  #
16
- # . Neither the name of the "OpenWFE" nor the names of its contributors may be
17
- # used to endorse or promote products derived from this software without
18
- # specific prior written permission.
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.
19
21
  #
20
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
- # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
- # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23
- # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24
- # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25
- # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26
- # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
- # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28
- # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29
- # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30
- # POSSIBILITY OF SUCH DAMAGE.
22
+ # Made in Japan.
31
23
  #++
32
- #
33
24
 
34
- #
35
- # "made in Japan"
36
- #
37
- # John Mettraux at openwfe.org
38
- #
39
25
 
40
- require 'openwfe/exceptions'
41
- require 'openwfe/expressions/flowexpression'
42
26
  require 'openwfe/rudefinitions'
27
+ require 'openwfe/expressions/flowexpression'
43
28
 
44
29
 
45
30
  module OpenWFE
@@ -54,8 +39,7 @@ module OpenWFE
54
39
  #
55
40
  # A [static] method for creating new RawExpression instances.
56
41
  #
57
- def self.new_raw (
58
- fei, parent_id, env_id, app_context, raw_representation)
42
+ def self.new_raw (fei, parent_id, env_id, app_context, raw_tree)
59
43
 
60
44
  re = self.new
61
45
 
@@ -67,89 +51,24 @@ module OpenWFE
67
51
  re.children = []
68
52
  re.apply_time = nil
69
53
 
70
- re.raw_representation = raw_representation
54
+ re.raw_representation = raw_tree
71
55
  re
72
56
  end
73
57
 
74
- #--
75
- # A duplication method that duplicates everything, except
76
- # the application context
77
- #
78
- #def dup
79
- # self.class.new_raw(
80
- # @fei.dup,
81
- # @parent_id ? @parent_id.dup : nil,
82
- # @environment_id ? @environment_id.dup : nil,
83
- # @application_context,
84
- # raw_representation)
85
- #end
86
- #alias :fulldup :dup
87
- #++
88
-
89
- def instantiate_real_expression (
90
- workitem, exp_name=nil, exp_class=nil, attributes=nil)
91
-
92
- exp_name ||= expression_name
93
- exp_class ||= expression_class
94
-
95
- raise "unknown expression '#{exp_name}'" \
96
- unless exp_class
97
-
98
- #ldebug do
99
- # "instantiate_real_expression() exp_class is #{exp_class}"
100
- #end
101
-
102
- attributes ||= raw_representation[1]
103
-
104
- exp = exp_class.new
105
- exp.fei = @fei
106
- exp.parent_id = @parent_id
107
- exp.environment_id = @environment_id
108
- exp.application_context = @application_context
109
- exp.attributes = attributes
110
-
111
- exp.raw_representation = raw_representation
112
- exp.raw_rep_updated = raw_rep_updated
113
- #
114
- # keeping track of how the expression look at apply /
115
- # instantiation time
116
-
117
- consider_tag workitem, exp
118
-
119
- exp.children = extract_children \
120
- unless exp_class.uses_template?
121
-
122
- exp
123
- end
124
-
125
58
  #
126
59
  # When a raw expression is applied, it gets turned into the
127
60
  # real expression which then gets applied.
128
61
  #
129
62
  def apply (workitem)
130
63
 
131
- exp_name, exp_class, attributes = determine_real_expression
64
+ exp_class, val = determine_real_expression_class
132
65
 
133
- expression = instantiate_real_expression(
134
- workitem, exp_name, exp_class, attributes)
66
+ expression = instantiate_real_expression(workitem, exp_class, val)
135
67
 
136
68
  expression.apply_time = Time.now
137
69
  expression.store_itself
138
70
 
139
- expression.apply workitem
140
- end
141
-
142
- #
143
- # This method is called by the expression pool when it is about
144
- # to launch a process, it will interpret the 'parameter' statements
145
- # in the process definition and raise an exception if the requirements
146
- # are not met.
147
- #
148
- def check_parameters (workitem)
149
-
150
- extract_parameters.each do |param|
151
- param.check(workitem)
152
- end
71
+ expression.apply(workitem)
153
72
  end
154
73
 
155
74
  #--
@@ -193,354 +112,219 @@ module OpenWFE
193
112
  # at the attributes of an expression before it's really
194
113
  # 'instantiated'.
195
114
  #
115
+ # (overriden by ExpExpression)
116
+ #
196
117
  def extract_attributes
197
118
 
198
119
  raw_representation[1]
199
120
  end
200
121
 
122
+ #
123
+ # This method is called by the expression pool when it is about
124
+ # to launch a process, it will interpret the 'parameter' statements
125
+ # in the process definition and raise an exception if the requirements
126
+ # are not met.
127
+ #
128
+ def check_parameters (workitem)
129
+
130
+ #extract_parameters.each { |param| param.check(workitem) }
131
+ ExpressionTree.check_parameters(raw_representation, workitem)
132
+ end
133
+
201
134
  protected
202
135
 
203
- #
204
- # looks up a participant in the participant map, considers
205
- # "my-participant" and "my_participant" as the same
206
- # (by doing two lookups).
207
- #
208
- def lookup_participant (name)
136
+ #
137
+ # Looks up a key as a variable or a participant.
138
+ #
139
+ def lookup (kind, key, underscore=false)
209
140
 
210
- p = get_participant_map.lookup_participant(name)
141
+ val = (kind == :variable) ?
142
+ lookup_variable(key) : get_participant_map.lookup_participant(key)
211
143
 
212
- unless p
213
- name = OpenWFE::to_underscore(name)
214
- p = get_participant_map.lookup_participant(name)
215
- end
144
+ return lookup(:participant, val) || lookup(:variable, val) \
145
+ if kind == :variable and val.is_a?(String) # alias lookup
216
146
 
217
- return name if p
147
+ return val, key if val
218
148
 
219
- nil
220
- end
149
+ return nil if underscore
221
150
 
222
- #
223
- # Determines if this raw expression points to a classical
224
- # expression, a participant or a subprocess, or nothing at all...
225
- #
226
- def determine_real_expression
227
-
228
- exp_name = expression_name()
229
- exp_class = expression_class()
230
- var_value = lookup_variable exp_name
231
- attributes = extract_attributes
232
-
233
- unless var_value
234
- #
235
- # accomodating "sub_process_name" and "sub-process-name"
236
- #
237
- alt = OpenWFE::to_underscore exp_name
238
- var_value = lookup_variable(alt) if alt != exp_name
239
-
240
- exp_name = alt if var_value
241
- end
151
+ lookup(kind, OpenWFE::to_underscore(key), true)
152
+ end
242
153
 
243
- var_value = exp_name \
244
- if (not exp_class and not var_value)
154
+ #
155
+ # Determines if this raw expression points to a classical
156
+ # expression, a participant or a subprocess, or nothing at all...
157
+ #
158
+ def determine_real_expression_class
245
159
 
246
- if var_value.is_a?(String)
160
+ exp_name = expression_name()
247
161
 
248
- participant_name = lookup_participant var_value
162
+ val, key =
163
+ lookup(:variable, exp_name) ||
164
+ expression_class() ||
165
+ lookup(:participant, exp_name)
166
+ # priority to variables
249
167
 
250
- if participant_name
251
- exp_name = participant_name
252
- exp_class = ParticipantExpression
253
- attributes['ref'] = participant_name
254
- end
168
+ if val.is_a?(Array)
255
169
 
256
- elsif var_value.is_a?(FlowExpressionId) \
257
- or var_value.is_a?(RawExpression)
170
+ [ SubProcessRefExpression, val ]
258
171
 
259
- exp_class = SubProcessRefExpression
260
- attributes['ref'] = exp_name
261
- end
262
- # else, it's a standard expression
172
+ elsif val.respond_to?(:consume)
263
173
 
264
- [ exp_name, exp_class, attributes ]
265
- end
174
+ [ ParticipantExpression, key ]
266
175
 
267
- def extract_children
176
+ else
268
177
 
269
- i = 0
270
- result = []
271
- raw_representation.last.each do |child|
178
+ [ val, nil ]
179
+ end
180
+ end
272
181
 
273
- if is_not_a_node?(child)
182
+ def instantiate_real_expression (workitem, exp_class, val)
274
183
 
275
- result << child
276
- else
184
+ raise "unknown expression '#{expression_name}'" unless exp_class
277
185
 
278
- cname = child.first.intern
186
+ exp = exp_class.new
187
+ exp.fei = @fei
188
+ exp.parent_id = @parent_id
189
+ exp.environment_id = @environment_id
190
+ exp.application_context = @application_context
191
+ exp.attributes = extract_attributes()
279
192
 
280
- next if cname == :param
281
- next if cname == :parameter
282
- #next if cname == :description
193
+ exp.raw_representation = @raw_representation
194
+ exp.raw_rep_updated = @raw_rep_updated
283
195
 
284
- cfei = @fei.dup
285
- cfei.expression_name = child.first
286
- cfei.expression_id = "#{cfei.expression_id}.#{i}"
196
+ consider_tag(workitem, exp)
197
+ consider_on_error(workitem, exp)
198
+ consider_on_cancel(workitem, exp)
287
199
 
288
- efei = @environment_id
200
+ if val
201
+ class << exp
202
+ attr_accessor :hint
203
+ end
204
+ exp.hint = val
205
+ end # later sparing a variable/participant lookup
289
206
 
290
- rawexp = RawExpression.new_raw(
291
- cfei, @fei, efei, @application_context, child)
207
+ exp
208
+ end
292
209
 
293
- get_expression_pool.update rawexp
210
+ #
211
+ # Expressions can get tagged. Tagged expressions can easily
212
+ # be cancelled (undone) or redone.
213
+ #
214
+ def consider_tag (workitem, new_expression)
294
215
 
295
- i = i + 1
216
+ tagname = new_expression.lookup_string_attribute(:tag, workitem)
296
217
 
297
- result << rawexp.fei
298
- end
299
- end
300
- result
301
- end
218
+ return unless tagname
302
219
 
303
- def extract_parameters
220
+ #ldebug { "consider_tag() tag is '#{tagname}'" }
304
221
 
305
- r = []
306
- raw_representation.last.each do |child|
222
+ set_variable(tagname, Tag.new(self, workitem))
223
+ #
224
+ # keep copy of raw expression and workitem as applied
307
225
 
308
- #next unless child.is_a?(SimpleExpRepresentation)
309
- #next unless child.is_a?(Array)
310
- next if is_not_a_node?(child)
226
+ new_expression.attributes['tag'] = tagname
227
+ #
228
+ # making sure that the value of tag doesn't change anymore
229
+ end
311
230
 
312
- name = child.first.to_sym
313
- next unless (name == :parameter or name == :param)
231
+ #
232
+ # A small class wrapping a tag (a raw expression and the workitem
233
+ # it received at apply time.
234
+ #
235
+ class Tag
314
236
 
315
- attributes = child[1]
237
+ attr_reader :raw_expression, :workitem
316
238
 
317
- r << Parameter.new(
318
- attributes['field'],
319
- attributes['match'],
320
- attributes['default'],
321
- attributes['type'])
322
- end
323
- r
239
+ def flow_expression_id
240
+ @raw_expression.fei
324
241
  end
242
+ alias :fei :flow_expression_id
325
243
 
326
- def is_not_a_node? (child)
244
+ def initialize (raw_expression, workitem)
327
245
 
328
- (( ! child.is_a?(Array)) ||
329
- child.size != 3 ||
330
- ( ! child.first.is_a?(String)))
246
+ @raw_expression = raw_expression.dup
247
+ @workitem = workitem.dup
331
248
  end
249
+ end
332
250
 
333
- #
334
- # Expressions can get tagged. Tagged expressions can easily
335
- # be cancelled (undone) or redone.
336
- #
337
- def consider_tag (workitem, new_expression)
338
-
339
- tagname = new_expression.lookup_string_attribute :tag, workitem
251
+ #
252
+ # manages 'on-error' expression tags
253
+ #
254
+ def consider_on_error (workitem, new_expression)
340
255
 
341
- return unless tagname
256
+ on_error = new_expression.lookup_string_attribute(:on_error, workitem)
342
257
 
343
- ldebug { "consider_tag() tag is '#{tagname}'" }
258
+ return unless on_error
344
259
 
345
- set_variable tagname, Tag.new(self, workitem)
346
- #
347
- # keep copy of raw expression and workitem as applied
260
+ on_error = on_error.to_s
348
261
 
349
- new_expression.attributes["tag"] = tagname
350
- #
351
- # making sure that the value of tag doesn't change anymore
352
- end
262
+ handlers = lookup_variable('error_handlers') || []
353
263
 
354
- #
355
- # A small class wrapping a tag (a raw expression and the workitem
356
- # it received at apply time.
357
- #
358
- class Tag
264
+ handlers << [ fei.dup, on_error ]
265
+ # not using a hash to preserve insertion order
266
+ # "deeper last"
359
267
 
360
- attr_reader \
361
- :raw_expression,
362
- :workitem
268
+ set_variable('error_handlers', handlers)
363
269
 
364
- def flow_expression_id
365
- @raw_expression.fei
366
- end
367
- alias :fei :flow_expression_id
270
+ new_expression.attributes['on_error'] = on_error
271
+ #
272
+ # making sure that the value of tag doesn't change anymore
273
+ end
368
274
 
369
- def initialize (raw_expression, workitem)
275
+ #
276
+ # manages 'on-cancel'
277
+ #
278
+ def consider_on_cancel (workitem, new_expression)
370
279
 
371
- @raw_expression = raw_expression.dup
372
- @workitem = workitem.dup
373
- end
374
- end
280
+ on_cancel = new_expression.lookup_string_attribute(:on_cancel, workitem)
375
281
 
376
- #
377
- # Encapsulating
378
- # <parameter field="x" default="y" type="z" match="m" />
379
- #
380
- # Somehow I have that : OpenWFEru is not a strongly typed language
381
- # ... Anyway I implemented that to please Pat.
382
- #
383
- class Parameter
384
-
385
- def initialize (field, match, default, type)
386
-
387
- @field = to_s field
388
- @match = to_s match
389
- @default = to_s default
390
- @type = to_s type
391
- end
282
+ return unless on_cancel
392
283
 
284
+ new_expression.attributes['on_cancel'] = [ on_cancel, workitem.dup ]
393
285
  #
394
- # Will raise an exception if this param requirement is not
395
- # met by the workitem.
286
+ # storing the on_cancel value (a participant name or a subprocess
287
+ # name along with a copy of the workitem as applied among the
288
+ # attributes of the new expression)
396
289
  #
397
- def check (workitem)
398
-
399
- unless @field
400
- raise \
401
- OpenWFE::ParameterException,
402
- "'parameter'/'param' without a 'field' attribute"
403
- end
404
-
405
- field_value = workitem.attributes[@field]
406
- field_value = @default unless field_value
407
-
408
- unless field_value
409
- raise \
410
- OpenWFE::ParameterException,
411
- "field '#{@field}' is missing" \
412
- end
413
-
414
- check_match(field_value)
415
-
416
- enforce_type(workitem, field_value)
417
- end
418
-
419
- protected
420
-
421
- #
422
- # Used in the constructor to flatten everything to strings.
423
- #
424
- def to_s (o)
425
- return nil unless o
426
- o.to_s
427
- end
428
-
429
- #
430
- # Will raise an exception if it cannot coerce the type
431
- # of the value to the one desired.
432
- #
433
- def enforce_type (workitem, value)
434
-
435
- value = if not @type
436
- value
437
- elsif @type == "string"
438
- value.to_s
439
- elsif @type == "int" or @type == "integer"
440
- Integer(value)
441
- elsif @type == "float"
442
- Float(value)
443
- else
444
- raise
445
- "unknown type '#{@type}' for field '#{@field}'"
446
- end
447
-
448
- workitem.attributes[@field] = value
449
- end
450
-
451
- def check_match (value)
452
-
453
- return unless @match
454
-
455
- unless value.to_s.match(@match)
456
- raise \
457
- OpenWFE::ParameterException,
458
- "value of field '#{@field}' doesn't match"
459
- end
460
- end
461
- end
462
- end
463
-
464
- #
465
- # This class is only present to ensure that OpenWFEru 0.9.17 can read
466
- # previous (<= 0.9.16) expools.
467
- #
468
- class ProgRawExpression < RawExpression
469
-
470
- def raw_representation
471
-
472
- @raw_representation.to_a
290
+ # (note 'on_cancel' and not 'on-cancel' as we're specifically storing
291
+ # more info and not just the initial string value of the attribute)
473
292
  end
474
293
  end
475
294
 
295
+ private
296
+
476
297
  #
477
- # This class is only present to ensure that OpenWFEru 0.9.17 can read
478
- # previous (<= 0.9.16) expools.
298
+ # OpenWFE process definitions do use some
299
+ # Ruby keywords... The workaround is to put an underscore
300
+ # just before the name to 'escape' it.
479
301
  #
480
- class XmlRawExpression < RawExpression
481
-
482
- def raw_representation
483
-
484
- get_def_parser.parse @raw_representation_s
485
- end
486
- end
302
+ # 'undo' isn't reserved by Ruby, but lets keep it in line
303
+ # with 'do' and 'redo' that are.
304
+ #
305
+ KEYWORDS = [
306
+ :if, :do, :redo, :undo, :print, :sleep, :loop, :break, :when
307
+ #:until, :while
308
+ ]
487
309
 
488
310
  #
489
- # This class is only present to ensure that OpenWFEru 0.9.17 can read
490
- # previous (<= 0.9.16) expools.
311
+ # Ensures the method name is not conflicting with Ruby keywords
312
+ # and turn dashes to underscores.
491
313
  #
492
- class SimpleExpRepresentation
314
+ def OpenWFE.make_safe (method_name)
493
315
 
494
- def to_a
495
-
496
- children = @children.collect do |c|
497
- if c.is_a?(SimpleExpRepresentation)
498
- c.to_a
499
- else
500
- c
501
- end
502
- end
316
+ method_name = OpenWFE::to_underscore(method_name)
503
317
 
504
- a = [ @name, @attributes, children ]
505
- end
318
+ KEYWORDS.include?(method_name.to_sym) ? "_#{method_name}" : method_name
506
319
  end
507
320
 
508
- private
321
+ def OpenWFE.to_expression_name (method_name)
509
322
 
510
- #
511
- # OpenWFE process definitions do use some
512
- # Ruby keywords... The workaround is to put an underscore
513
- # just before the name to 'escape' it.
514
- #
515
- # 'undo' isn't reserved by Ruby, but lets keep it in line
516
- # with 'do' and 'redo' that are.
517
- #
518
- KEYWORDS = [
519
- :if, :do, :redo, :undo, :print, :sleep, :loop, :break, :when
520
- #:until, :while
521
- ]
522
-
523
- #
524
- # Ensures the method name is not conflicting with Ruby keywords
525
- # and turn dashes to underscores.
526
- #
527
- def OpenWFE.make_safe (method_name)
528
-
529
- method_name = OpenWFE::to_underscore(method_name)
530
-
531
- return "_" + method_name \
532
- if KEYWORDS.include? eval(":"+method_name)
533
-
534
- method_name
535
- end
536
-
537
- def OpenWFE.to_expression_name (method_name)
538
-
539
- method_name = method_name.to_s
540
- method_name = method_name[1..-1] if method_name[0, 1] == "_"
541
- method_name = OpenWFE::to_dash(method_name)
542
- method_name
543
- end
323
+ method_name = method_name.to_s
324
+ method_name = method_name[1..-1] if method_name[0, 1] == '_'
325
+ method_name = OpenWFE::to_dash(method_name)
326
+ method_name
327
+ end
544
328
 
545
329
  end
546
330