ruote 0.9.18 → 0.9.19

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 (323) hide show
  1. data/README.txt +2 -0
  2. data/examples/about_state.rb +29 -29
  3. data/examples/bigflow.rb +9 -9
  4. data/examples/csv_weather.rb +4 -4
  5. data/examples/engine_template.rb +141 -129
  6. data/examples/flowtracing.rb +8 -8
  7. data/examples/homeworkreview.rb +15 -15
  8. data/examples/kotoba.rb +9 -9
  9. data/examples/mano_tracker.rb +63 -63
  10. data/examples/openwferu.rb +22 -20
  11. data/examples/quotereporter.rb +79 -79
  12. data/lib/openwfe/contextual.rb +72 -72
  13. data/lib/openwfe/def.rb +21 -21
  14. data/lib/openwfe/engine.rb +19 -19
  15. data/lib/openwfe/engine/engine.rb +578 -614
  16. data/lib/openwfe/engine/expool_methods.rb +144 -115
  17. data/lib/openwfe/engine/file_persisted_engine.rb +77 -77
  18. data/lib/openwfe/engine/participant_methods.rb +96 -96
  19. data/lib/openwfe/engine/status_methods.rb +271 -247
  20. data/lib/openwfe/engine/update_exp_methods.rb +69 -69
  21. data/lib/openwfe/exceptions.rb +25 -25
  22. data/lib/openwfe/expool/errorjournal.rb +334 -348
  23. data/lib/openwfe/expool/expool_pause_methods.rb +98 -0
  24. data/lib/openwfe/expool/expressionpool.rb +793 -800
  25. data/lib/openwfe/expool/expstorage.rb +284 -313
  26. data/lib/openwfe/expool/history.rb +193 -105
  27. data/lib/openwfe/expool/journal.rb +163 -163
  28. data/lib/openwfe/expool/journal_replay.rb +228 -228
  29. data/lib/openwfe/expool/parser.rb +178 -142
  30. data/lib/openwfe/{orest/exception.rb → expool/paused_error.rb} +49 -32
  31. data/lib/openwfe/expool/representation.rb +59 -59
  32. data/lib/openwfe/expool/threadedexpstorage.rb +137 -134
  33. data/lib/openwfe/expool/wfidgen.rb +289 -287
  34. data/lib/openwfe/expool/yamlexpstorage.rb +154 -154
  35. data/lib/openwfe/expressions/condition.rb +175 -168
  36. data/lib/openwfe/expressions/environment.rb +165 -165
  37. data/lib/openwfe/expressions/expressionmap.rb +135 -131
  38. data/lib/openwfe/expressions/fe_cancel.rb +68 -68
  39. data/lib/openwfe/expressions/fe_command.rb +190 -190
  40. data/lib/openwfe/expressions/fe_concurrence.rb +531 -531
  41. data/lib/openwfe/expressions/fe_cron.rb +152 -197
  42. data/lib/openwfe/expressions/fe_cursor.rb +152 -186
  43. data/lib/openwfe/expressions/fe_define.rb +118 -118
  44. data/lib/openwfe/expressions/fe_do.rb +109 -109
  45. data/lib/openwfe/expressions/fe_equals.rb +219 -219
  46. data/lib/openwfe/expressions/fe_filter.rb +98 -98
  47. data/lib/openwfe/expressions/fe_filter_definition.rb +122 -122
  48. data/lib/openwfe/expressions/fe_fqv.rb +203 -203
  49. data/lib/openwfe/expressions/fe_http.rb +212 -0
  50. data/lib/openwfe/expressions/fe_if.rb +214 -214
  51. data/lib/openwfe/expressions/fe_iterator.rb +91 -91
  52. data/lib/openwfe/expressions/fe_listen.rb +268 -268
  53. data/lib/openwfe/expressions/fe_losfor.rb +73 -73
  54. data/lib/openwfe/expressions/fe_misc.rb +343 -351
  55. data/lib/openwfe/expressions/fe_participant.rb +206 -206
  56. data/lib/openwfe/expressions/fe_reserve.rb +153 -142
  57. data/lib/openwfe/expressions/fe_save.rb +226 -226
  58. data/lib/openwfe/expressions/fe_sequence.rb +66 -56
  59. data/lib/openwfe/expressions/fe_set.rb +80 -80
  60. data/lib/openwfe/expressions/fe_sleep.rb +132 -125
  61. data/lib/openwfe/expressions/fe_step.rb +113 -111
  62. data/lib/openwfe/expressions/fe_subprocess.rb +139 -136
  63. data/lib/openwfe/expressions/fe_timeout.rb +74 -78
  64. data/lib/openwfe/expressions/fe_wait.rb +48 -49
  65. data/lib/openwfe/expressions/fe_when.rb +106 -106
  66. data/lib/openwfe/expressions/filter.rb +60 -60
  67. data/lib/openwfe/expressions/flowexpression.rb +618 -612
  68. data/lib/openwfe/expressions/iterator.rb +158 -158
  69. data/lib/openwfe/expressions/merge.rb +53 -53
  70. data/lib/openwfe/expressions/raw.rb +396 -397
  71. data/lib/openwfe/expressions/rprocdef.rb +261 -266
  72. data/lib/openwfe/expressions/time.rb +238 -243
  73. data/lib/openwfe/expressions/timeout.rb +135 -135
  74. data/lib/openwfe/expressions/value.rb +55 -55
  75. data/lib/openwfe/extras/engine/db_persisted_engine.rb +94 -0
  76. data/lib/openwfe/extras/expool/dberrorjournal.rb +189 -0
  77. data/lib/openwfe/extras/expool/dbexpstorage.rb +355 -0
  78. data/lib/openwfe/extras/expool/dbhistory.rb +135 -0
  79. data/lib/openwfe/extras/listeners/sqslisteners.rb +146 -0
  80. data/lib/openwfe/extras/misc/activityfeed.rb +264 -0
  81. data/lib/openwfe/extras/misc/basecamp.rb +485 -0
  82. data/lib/openwfe/extras/participants/activeparticipants.rb +749 -0
  83. data/lib/openwfe/extras/participants/atomfeed_participants.rb +173 -0
  84. data/lib/openwfe/extras/participants/atompub_participants.rb +267 -0
  85. data/lib/openwfe/extras/participants/basecamp_participants.rb +87 -0
  86. data/lib/openwfe/extras/participants/csvparticipants.rb +127 -0
  87. data/lib/openwfe/extras/participants/sqsparticipants.rb +125 -0
  88. data/lib/openwfe/extras/participants/twitterparticipants.rb +176 -0
  89. data/lib/openwfe/filterdef.rb +191 -191
  90. data/lib/openwfe/flowexpressionid.rb +271 -269
  91. data/lib/openwfe/listeners/listener.rb +61 -61
  92. data/lib/openwfe/listeners/listeners.rb +81 -81
  93. data/lib/openwfe/listeners/socketlisteners.rb +189 -189
  94. data/lib/openwfe/logging.rb +74 -74
  95. data/lib/openwfe/omixins.rb +55 -54
  96. data/lib/openwfe/orest/definitions.rb +90 -90
  97. data/lib/openwfe/orest/osocket.rb +91 -91
  98. data/lib/openwfe/orest/xmlcodec.rb +471 -459
  99. data/lib/openwfe/participants.rb +19 -19
  100. data/lib/openwfe/participants/enoparticipants.rb +187 -187
  101. data/lib/openwfe/participants/participant.rb +100 -100
  102. data/lib/openwfe/participants/participantmap.rb +170 -170
  103. data/lib/openwfe/participants/participants.rb +316 -316
  104. data/lib/openwfe/participants/soapparticipants.rb +90 -90
  105. data/lib/openwfe/participants/socketparticipants.rb +143 -143
  106. data/lib/openwfe/participants/storeparticipants.rb +198 -198
  107. data/lib/openwfe/rexml.rb +44 -0
  108. data/lib/openwfe/rudefinitions.rb +87 -91
  109. data/lib/openwfe/service.rb +65 -65
  110. data/lib/openwfe/storage/yamlcustom.rb +71 -71
  111. data/lib/openwfe/storage/yamlfilestorage.rb +190 -190
  112. data/lib/openwfe/tools/flowtracer.rb +41 -45
  113. data/lib/openwfe/util/dollar.rb +125 -139
  114. data/lib/openwfe/util/irb.rb +42 -42
  115. data/lib/openwfe/util/observable.rb +93 -99
  116. data/lib/openwfe/util/ometa.rb +36 -36
  117. data/lib/openwfe/util/treechecker.rb +122 -0
  118. data/lib/openwfe/util/workqueue.rb +73 -73
  119. data/lib/openwfe/util/xml.rb +285 -279
  120. data/lib/openwfe/utils.rb +415 -442
  121. data/lib/openwfe/version.rb +1 -1
  122. data/lib/openwfe/workitem.rb +444 -437
  123. data/lib/openwfe/worklist/oldrest.rb +161 -161
  124. data/lib/openwfe/worklist/storelocks.rb +218 -218
  125. data/lib/openwfe/worklist/storeparticipant.rb +19 -19
  126. data/lib/openwfe/worklist/worklist.rb +223 -223
  127. data/test/back_0916_test.rb +57 -59
  128. data/test/bm/bm_1_xml_vs_prog.rb +25 -22
  129. data/test/bm/bm_2_step.rb +81 -81
  130. data/test/bm/ft_0f_5ms.rb +13 -13
  131. data/test/bm/ft_26_load.rb +177 -179
  132. data/test/bm/ft_26b_load.rb +57 -59
  133. data/test/bm/ft_26c_load.rb +70 -65
  134. data/test/bm/ft_recu.rb +51 -51
  135. data/test/clone_test.rb +145 -99
  136. data/test/concurrence_test.rb +41 -41
  137. data/test/condition_test.rb +104 -90
  138. data/test/description_test.rb +46 -45
  139. data/test/eno_test.rb +36 -36
  140. data/test/expmap_test.rb +26 -26
  141. data/test/extras/README.txt +5 -0
  142. data/test/extras/active_connection.rb +48 -0
  143. data/test/extras/active_with_engine_test.rb +140 -0
  144. data/test/extras/activityfeed_test.rb +85 -0
  145. data/test/extras/ap_0_test.rb +287 -0
  146. data/test/extras/ap_1_test.rb +53 -0
  147. data/test/extras/ap_test_base.rb +24 -0
  148. data/test/extras/atomfeedp_test.rb +113 -0
  149. data/test/extras/atompubp_test.rb +91 -0
  150. data/test/extras/basecamp_test.rb +53 -0
  151. data/test/extras/db_errorjournal_utest.rb +75 -0
  152. data/test/extras/db_expstorage_utest.rb +171 -0
  153. data/test/extras/db_history_0_test.rb +58 -0
  154. data/test/extras/ft_19_csv.rb +58 -0
  155. data/test/extras/ft_71_b14008.rb +85 -0
  156. data/test/extras/sqs_test.rb +57 -0
  157. data/test/extras/twitter_test.rb +62 -0
  158. data/test/fe_lookup_att_test.rb +41 -41
  159. data/test/fei_test.rb +131 -131
  160. data/test/file_persisted_engine_test.rb +30 -30
  161. data/test/file_persistence_test.rb +112 -111
  162. data/test/filep_cancel_test.rb +58 -58
  163. data/test/filter_test.rb +67 -67
  164. data/test/flowtestbase.rb +207 -219
  165. data/test/ft_0.rb +35 -35
  166. data/test/ft_0b_sequence.rb +15 -15
  167. data/test/ft_0c_testname.rb +12 -12
  168. data/test/ft_0d_participant.rb +9 -9
  169. data/test/ft_0e_multibody.rb +11 -11
  170. data/test/ft_10_loop.rb +103 -104
  171. data/test/ft_11_ppd.rb +285 -289
  172. data/test/ft_11b_ppd.rb +26 -26
  173. data/test/ft_12_blockparticipant.rb +57 -57
  174. data/test/ft_13_eno.rb +31 -31
  175. data/test/ft_14_subprocess.rb +45 -45
  176. data/test/ft_14b_subprocess.rb +107 -107
  177. data/test/ft_14c_subprocess.rb +33 -33
  178. data/test/ft_15_iterator.rb +127 -127
  179. data/test/ft_15b_iterator.rb +41 -41
  180. data/test/ft_16_fqv.rb +44 -44
  181. data/test/ft_17_condition.rb +48 -48
  182. data/test/ft_18_pname.rb +26 -26
  183. data/test/ft_1_unset.rb +140 -140
  184. data/test/ft_1b_unset.rb +17 -17
  185. data/test/ft_20_cron.rb +33 -33
  186. data/test/ft_21_cron.rb +51 -51
  187. data/test/ft_21b_cron_pause.rb +41 -41
  188. data/test/ft_22_history.rb +45 -41
  189. data/test/ft_23_when.rb +51 -51
  190. data/test/ft_23b_when.rb +43 -43
  191. data/test/ft_23c_wait.rb +48 -48
  192. data/test/ft_23d_cww.rb +28 -28
  193. data/test/ft_24_def.rb +15 -15
  194. data/test/ft_25_cancel.rb +57 -54
  195. data/test/ft_27_getflowpos.rb +79 -83
  196. data/test/ft_28_fileparticipant.rb +25 -25
  197. data/test/ft_29_httprb.rb +57 -57
  198. data/test/ft_2_concurrence.rb +99 -97
  199. data/test/ft_2b_concurrence.rb +132 -132
  200. data/test/ft_2c_concurrence.rb +37 -37
  201. data/test/ft_30_socketlistener.rb +133 -133
  202. data/test/ft_31_flowname.rb +15 -16
  203. data/test/ft_32_journal.rb +48 -48
  204. data/test/ft_32c_journal.rb +54 -54
  205. data/test/ft_32d_journal.rb +43 -46
  206. data/test/ft_33_description.rb +62 -62
  207. data/test/ft_34_cancelwfid.rb +37 -37
  208. data/test/ft_35_localdefs.rb +36 -34
  209. data/test/ft_36_subprocids.rb +61 -61
  210. data/test/ft_37_pnames.rb +33 -33
  211. data/test/ft_38_tag.rb +82 -82
  212. data/test/ft_38b_tag.rb +97 -97
  213. data/test/ft_38c_tag.rb +50 -50
  214. data/test/ft_38d_tag.rb +53 -0
  215. data/test/ft_39_reserve.rb +33 -33
  216. data/test/ft_39b_reserve.rb +59 -59
  217. data/test/ft_3_equals.rb +131 -131
  218. data/test/ft_3b_lookup_vf.rb +43 -43
  219. data/test/ft_40_defined.rb +33 -33
  220. data/test/ft_41_case.rb +80 -80
  221. data/test/ft_42_environments.rb +48 -48
  222. data/test/ft_43_pat10.rb +51 -51
  223. data/test/ft_44_save.rb +37 -37
  224. data/test/ft_44b_restore.rb +151 -151
  225. data/test/ft_45_citerator.rb +149 -149
  226. data/test/ft_45b_citerator.rb +77 -0
  227. data/test/ft_46_pparams.rb +27 -27
  228. data/test/ft_47_filter.rb +100 -100
  229. data/test/ft_48_fe_filter.rb +41 -41
  230. data/test/ft_49_condition.rb +101 -94
  231. data/test/ft_4_misc.rb +185 -190
  232. data/test/ft_50_xml_attribute.rb +101 -104
  233. data/test/ft_51_stack.rb +30 -30
  234. data/test/ft_52_obs_participant.rb +73 -73
  235. data/test/ft_53_null_noop_participant.rb +31 -31
  236. data/test/ft_54_listen.rb +183 -183
  237. data/test/ft_54b_listen.rb +32 -32
  238. data/test/ft_54c_listen.rb +60 -60
  239. data/test/ft_55_ptimeout.rb +29 -30
  240. data/test/ft_56_timeout.rb +29 -29
  241. data/test/ft_57_a.rb +105 -102
  242. data/test/ft_58_ejournal.rb +83 -80
  243. data/test/ft_58b_ejournal.rb +82 -0
  244. data/test/ft_59_ps.rb +148 -86
  245. data/test/ft_5_time.rb +77 -77
  246. data/test/ft_60_ecancel.rb +98 -98
  247. data/test/ft_61_elsub.rb +23 -23
  248. data/test/ft_62_procparticipant.rb +46 -46
  249. data/test/ft_63_pause.rb +82 -69
  250. data/test/ft_64_alias.rb +56 -57
  251. data/test/ft_65_stringlaunch.rb +29 -29
  252. data/test/ft_66_subforget.rb +42 -42
  253. data/test/ft_67_schedlaunch.rb +58 -59
  254. data/test/ft_68_ifparticipant.rb +39 -39
  255. data/test/ft_69_cancelmissing.rb +23 -21
  256. data/test/ft_6_lambda.rb +37 -37
  257. data/test/ft_70_lookupvar.rb +25 -25
  258. data/test/ft_71_log.rb +35 -35
  259. data/test/ft_72_lookup_processes.rb +43 -40
  260. data/test/ft_73_cancel_sub.rb +79 -79
  261. data/test/ft_74_block_and_workitem_dup.rb +42 -42
  262. data/test/ft_75_ruby_attributes.rb +53 -51
  263. data/test/ft_76_merge_isolate.rb +57 -57
  264. data/test/ft_77_segments.rb +13 -13
  265. data/test/ft_78_eval.rb +94 -94
  266. data/test/ft_79_tticket.rb +79 -79
  267. data/test/ft_79b_tticket.rb +73 -73
  268. data/test/ft_79c_outcome.rb +36 -36
  269. data/test/ft_7_lose.rb +73 -73
  270. data/test/ft_7b_lose.rb +49 -49
  271. data/test/ft_80_spname.rb +65 -65
  272. data/test/ft_81_exp.rb +30 -30
  273. data/test/ft_82_trecu.rb +30 -24
  274. data/test/ft_83_badpause.rb +35 -35
  275. data/test/ft_84_updateexp.rb +118 -118
  276. data/test/ft_84b_subrepr.rb +72 -0
  277. data/test/ft_85_dolhash.rb +18 -18
  278. data/test/ft_86_dollar_fv.rb +33 -33
  279. data/test/ft_87_define.rb +47 -47
  280. data/test/ft_88_http.rb +100 -0
  281. data/test/ft_8_forget.rb +25 -25
  282. data/test/ft_9_cursor.rb +119 -110
  283. data/test/ft_9b_cursor.rb +70 -70
  284. data/test/ft_tests.rb +6 -0
  285. data/test/hash_test.rb +52 -34
  286. data/test/hparticipant_test.rb +92 -88
  287. data/test/lookup_att_test.rb +70 -70
  288. data/test/lookup_vf_test.rb +52 -52
  289. data/test/misc_test.rb +55 -51
  290. data/test/obs_test.rb +82 -82
  291. data/test/param_test.rb +181 -181
  292. data/test/participant_test.rb +46 -46
  293. data/test/pending.rb +12 -12
  294. data/test/ps_representation.rb +70 -70
  295. data/test/rake_ltest.rb +2 -2
  296. data/test/rake_qtest.rb +11 -11
  297. data/test/raw_prog_test.rb +303 -308
  298. data/test/restart_cron_test.rb +74 -74
  299. data/test/restart_paused_test.rb +52 -47
  300. data/test/restart_sleep_test.rb +80 -80
  301. data/test/restart_when_test.rb +64 -64
  302. data/test/ruby_procdef_test.rb +71 -71
  303. data/test/rutest_utils.rb +32 -32
  304. data/test/sec_test.rb +143 -142
  305. data/test/slock_test.rb +41 -41
  306. data/test/storage_test.rb +15 -15
  307. data/test/timeout_test.rb +53 -53
  308. data/test/treechecker_test.rb +111 -0
  309. data/test/util_xml_test.rb +57 -57
  310. data/test/wfid_test.rb +93 -93
  311. data/test/wi_test.rb +58 -58
  312. metadata +64 -19
  313. data/examples/scheduler_cron_usage.rb +0 -48
  314. data/examples/scheduler_usage.rb +0 -56
  315. data/lib/openwfe/orest/controlclient.rb +0 -119
  316. data/lib/openwfe/orest/oldrestservlet.rb +0 -279
  317. data/lib/openwfe/orest/restclient.rb +0 -176
  318. data/lib/openwfe/orest/workitem.rb +0 -206
  319. data/lib/openwfe/orest/worklistclient.rb +0 -272
  320. data/test/bm/ft_26d_load.rb +0 -97
  321. data/test/ft_59b_ps_for_pat.rb +0 -58
  322. data/test/ft_64_clone.rb +0 -69
  323. data/test/orest_test.rb +0 -251
@@ -2,31 +2,31 @@
2
2
  #--
3
3
  # Copyright (c) 2007-2008, John Mettraux, OpenWFE.org
4
4
  # All rights reserved.
5
- #
6
- # Redistribution and use in source and binary forms, with or without
5
+ #
6
+ # Redistribution and use in source and binary forms, with or without
7
7
  # modification, are permitted provided that the following conditions are met:
8
- #
8
+ #
9
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
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
14
  # and/or other materials provided with the distribution.
15
- #
15
+ #
16
16
  # . Neither the name of the "OpenWFE" nor the names of its contributors may be
17
17
  # used to endorse or promote products derived from this software without
18
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
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
30
  # POSSIBILITY OF SUCH DAMAGE.
31
31
  #++
32
32
  #
@@ -46,343 +46,345 @@ require 'openwfe/rudefinitions'
46
46
 
47
47
 
48
48
  module OpenWFE
49
-
50
- #
51
- # This default wfid generator outputs a long integer as a String.
52
- # The last given id (in order to prevent clocks being put back) is
53
- # stored in the work directory in the file "wfidgen.last"
54
- #
55
- class DefaultWfidGenerator < Service
56
-
57
- def initialize (service_name, application_context)
58
49
 
59
- super
50
+ #
51
+ # This default wfid generator outputs a long integer as a String.
52
+ # The last given id (in order to prevent clocks being put back) is
53
+ # stored in the work directory in the file "wfidgen.last"
54
+ #
55
+ class DefaultWfidGenerator < Service
60
56
 
61
- @last = -1
62
- @mutex = Mutex.new
63
-
64
- @last_fn = get_work_directory + '/wfidgen.last'
65
-
66
- load_last()
67
-
68
- ensure_last_f
69
- end
70
-
71
- #
72
- # Returns a new workflow instance id
73
- #
74
- # The launchitem parameter is not used by this generator.
75
- #
76
- def generate (launchitem=nil)
57
+ def initialize (service_name, application_context)
77
58
 
78
- wfid = nil
59
+ super
79
60
 
80
- @mutex.synchronize do
81
- wfid = now
82
- wfid = @last + 1 if wfid <= @last
83
- @last = wfid
84
- save_last
85
- end
61
+ @last = -1
62
+ @mutex = Mutex.new
86
63
 
87
- to_string(wfid)
88
- end
64
+ @last_fn = get_work_directory + '/wfidgen.last'
89
65
 
90
- #
91
- # The actual job of turning the numeric result into a String.
92
- # This method is overriden in extension of this class.
93
- #
94
- def to_string (numeric_id)
66
+ load_last()
95
67
 
96
- numeric_id.to_s
97
- end
68
+ ensure_last_f
69
+ end
98
70
 
99
- #
100
- # Is a simple call to OpenWFE::split_wfid()
101
- #
102
- def split_wfid (wfid)
71
+ #
72
+ # Returns a new workflow instance id
73
+ #
74
+ # The launchitem parameter is not used by this generator.
75
+ #
76
+ def generate (launchitem=nil)
103
77
 
104
- OpenWFE.split_wfid(wfid)
105
- end
78
+ wfid = nil
106
79
 
107
- #
108
- # This method is called by OpenWFE::split_wfid() when it has detected
109
- # a wfid following this 'defaut' scheme.
110
- #
111
- def self.split_wfid (wfid)
80
+ @mutex.synchronize do
81
+ wfid = now
82
+ wfid = @last + 1 if wfid <= @last
83
+ @last = wfid
84
+ save_last
85
+ end
112
86
 
113
- r = []
114
- 0.upto(wfid.length-1) do |i|
115
- r << wfid[i, 1]
116
- end
87
+ to_string(wfid)
88
+ end
117
89
 
118
- r
119
- end
90
+ #
91
+ # The actual job of turning the numeric result into a String.
92
+ # This method is overriden in extension of this class.
93
+ #
94
+ def to_string (numeric_id)
120
95
 
121
- #
122
- # Stops this service.
123
- # In this particular implementation, makes sure the "wfidgen.last"
124
- # file is closed.
125
- #
126
- def stop
96
+ numeric_id.to_s
97
+ end
127
98
 
128
- #linfo { "stop() stopping '#{@service_name}'" }
129
- @last_f.close if @last_f
130
- end
99
+ #
100
+ # Is a simple call to OpenWFE::split_wfid()
101
+ #
102
+ def split_wfid (wfid)
131
103
 
132
- protected
133
-
134
- def ensure_last_f
135
- if (not @last_f) or @last_f.closed?
136
- begin
137
- @last_f = File.open(@last_fn, "w+")
138
- rescue Exception => e
139
- lwarn do
140
- "new() failed to open #{@last_fn}, "+
141
- "continuing anyway...\n"+
142
- OpenWFE::exception_to_s(e)
143
- end
144
- end
145
- end
146
- end
104
+ OpenWFE.split_wfid(wfid)
105
+ end
147
106
 
148
- def now
149
- wfid = Time.now.to_f * 1000 * 10
150
- wfid.to_i
151
- end
107
+ #
108
+ # This method is called by OpenWFE::split_wfid() when it has detected
109
+ # a wfid following this 'defaut' scheme.
110
+ #
111
+ def self.split_wfid (wfid)
152
112
 
153
- def save_last
154
- return unless @last_f
155
- ensure_last_f()
156
- @last_f.pos = 0
157
- @last_f.puts @last
158
- end
113
+ r = []
114
+ 0.upto(wfid.length-1) do |i|
115
+ r << wfid[i, 1]
116
+ end
159
117
 
160
- def load_last
161
- @mutex.synchronize do
162
-
163
- if File.exist?(@last_fn)
164
- begin
165
- s = File.open(@last_fn, "r") do |f|
166
- f.readline
167
- end
168
- @last = Integer(s)
169
- #puts @last
170
- rescue Exception => e
171
- #puts
172
- #puts e.to_s
173
- end
174
- end
175
-
176
- n = now
177
-
178
- @last = n if (not @last) or (@last < n)
179
- end
180
- end
118
+ r
181
119
  end
182
120
 
183
121
  #
184
- # This extension of DefaultWfidGenerator produces ids like
185
- # "20070318-jonowoguya" or "20071224-jesoshimoha" that are a bit
186
- # easier to grasp than full integer wfids.
187
- #
188
- # Now relying on the 'rufus-mnemo' gem.
122
+ # Stops this service.
123
+ # In this particular implementation, makes sure the "wfidgen.last"
124
+ # file is closed.
189
125
  #
190
- class KotobaWfidGenerator < DefaultWfidGenerator
126
+ def stop
191
127
 
192
- #
193
- # Overrides the to_string() method of the DefaultWfidGenerator,
194
- #
195
- def to_string (numeric_id)
128
+ #linfo { "stop() stopping '#{@service_name}'" }
129
+ if @last_f
130
+ @last_f.close rescue nil
131
+ end
132
+ end
196
133
 
197
- self.class.to_string(numeric_id)
134
+ protected
135
+
136
+ def ensure_last_f
137
+ if (not @last_f) or @last_f.closed?
138
+ begin
139
+ @last_f = File.open(@last_fn, "w+")
140
+ rescue Exception => e
141
+ lwarn do
142
+ "new() failed to open #{@last_fn}, "+
143
+ "continuing anyway...\n"+
144
+ OpenWFE::exception_to_s(e)
145
+ end
146
+ end
198
147
  end
148
+ end
149
+
150
+ def now
151
+ wfid = Time.now.to_f * 1000 * 10
152
+ wfid.to_i
153
+ end
154
+
155
+ def save_last
156
+ return unless @last_f
157
+ ensure_last_f()
158
+ @last_f.pos = 0
159
+ @last_f.puts @last
160
+ end
161
+
162
+ def load_last
163
+ @mutex.synchronize do
164
+
165
+ if File.exist?(@last_fn)
166
+ begin
167
+ s = File.open(@last_fn, "r") do |f|
168
+ f.readline
169
+ end
170
+ @last = Integer(s)
171
+ #puts @last
172
+ rescue Exception => e
173
+ #puts
174
+ #puts e.to_s
175
+ end
176
+ end
199
177
 
200
- #
201
- # That's here that the numeric wfid gets turned into a 'kotoba'.
202
- # A static method easily accessible by any.
203
- #
204
- def self.to_string (numeric_id)
205
-
206
- i = numeric_id % (10 * 1000 * 60 * 60 * 24)
207
- t = Time.now.gmtime
178
+ n = now
208
179
 
209
- s = sprintf "%4d%02d%02d", t.year, t.month, t.day
210
- s << "-"
211
- s << Rufus::Mnemo::from_integer(i)
212
- s
180
+ @last = n if (not @last) or (@last < n)
213
181
  end
182
+ end
183
+ end
184
+
185
+ #
186
+ # This extension of DefaultWfidGenerator produces ids like
187
+ # "20070318-jonowoguya" or "20071224-jesoshimoha" that are a bit
188
+ # easier to grasp than full integer wfids.
189
+ #
190
+ # Now relying on the 'rufus-mnemo' gem.
191
+ #
192
+ class KotobaWfidGenerator < DefaultWfidGenerator
214
193
 
215
- #
216
- # This method is called by OpenWFE::split_wfid() when it has detected
217
- # a wfid following the 'kotoba' scheme.
218
- # Returns the 'kotoba' wfid split into its syllables
219
- #
220
- def self.split_wfid (wfid)
194
+ #
195
+ # Overrides the to_string() method of the DefaultWfidGenerator,
196
+ #
197
+ def to_string (numeric_id)
221
198
 
222
- Rufus::Mnemo::split(wfid[9..-1])
223
- end
199
+ self.class.to_string(numeric_id)
200
+ end
224
201
 
225
- #
226
- # Turns a KotobaWfidGenerator produced wfid into a UTC date.
227
- #
228
- def self.to_time (wfid)
202
+ #
203
+ # That's here that the numeric wfid gets turned into a 'kotoba'.
204
+ # A static method easily accessible by any.
205
+ #
206
+ def self.to_string (numeric_id)
229
207
 
230
- year = wfid[0, 4]
231
- month = wfid[4, 2]
232
- day = wfid[6, 2]
208
+ i = numeric_id % (10 * 1000 * 60 * 60 * 24)
209
+ t = Time.now.gmtime
233
210
 
234
- s = wfid[9..-1]
211
+ s = sprintf "%4d%02d%02d", t.year, t.month, t.day
212
+ s << "-"
213
+ s << Rufus::Mnemo::from_integer(i)
214
+ s
215
+ end
235
216
 
236
- i = Rufus::Mnemo::to_integer(s)
217
+ #
218
+ # This method is called by OpenWFE::split_wfid() when it has detected
219
+ # a wfid following the 'kotoba' scheme.
220
+ # Returns the 'kotoba' wfid split into its syllables
221
+ #
222
+ def self.split_wfid (wfid)
237
223
 
238
- hour = (i / (10000 * 60 * 60)) % 24
239
- min = (i / (10000 * 60)) % 60
240
- sec = (i / 10000) % 60
241
- usec = (i * 100) % 1000000
224
+ Rufus::Mnemo::split(wfid[9..-1])
225
+ end
242
226
 
243
- #puts "hms #{hour} #{min} #{sec} #{usec}"
227
+ #
228
+ # Turns a KotobaWfidGenerator produced wfid into a UTC date.
229
+ #
230
+ def self.to_time (wfid)
244
231
 
245
- Time.utc(year, month, day, hour, min, sec, usec)
246
- end
232
+ year = wfid[0, 4]
233
+ month = wfid[4, 2]
234
+ day = wfid[6, 2]
247
235
 
248
- def self.from_time (t)
236
+ s = wfid[9..-1]
249
237
 
250
- to_string(t.to_f * 10 * 1000).to_i
251
- end
252
- end
238
+ i = Rufus::Mnemo::to_integer(s)
253
239
 
254
- #
255
- # This wfid generator returns as wfid the value found in a given
256
- # field of the launchitem (if any).
257
- #
258
- # If there is no launchitem or no field, a Kotoba wfid is returned.
259
- #
260
- # This generator is useful for engines that have to use workflow
261
- # instance ids generated by other systems.
262
- #
263
- class FieldWfidGenerator < KotobaWfidGenerator
240
+ hour = (i / (10000 * 60 * 60)) % 24
241
+ min = (i / (10000 * 60)) % 60
242
+ sec = (i / 10000) % 60
243
+ usec = (i * 100) % 1000000
264
244
 
265
- def initialize (service_name, application_context, field_name)
245
+ #puts "hms #{hour} #{min} #{sec} #{usec}"
266
246
 
267
- super service_name, application_context
247
+ Time.utc(year, month, day, hour, min, sec, usec)
248
+ end
268
249
 
269
- @field_name = field_name
270
- end
250
+ def self.from_time (t)
271
251
 
272
- def generate (launchitem=nil)
252
+ to_string(t.to_f * 10 * 1000).to_i
253
+ end
254
+ end
273
255
 
274
- return super unless launchitem
256
+ #
257
+ # This wfid generator returns as wfid the value found in a given
258
+ # field of the launchitem (if any).
259
+ #
260
+ # If there is no launchitem or no field, a Kotoba wfid is returned.
261
+ #
262
+ # This generator is useful for engines that have to use workflow
263
+ # instance ids generated by other systems.
264
+ #
265
+ class FieldWfidGenerator < KotobaWfidGenerator
275
266
 
276
- wfid = launchitem.attributes[@field_name]
267
+ def initialize (service_name, application_context, field_name)
277
268
 
278
- return wfid.to_s if wfid
269
+ super service_name, application_context
279
270
 
280
- super
281
- #
282
- # if the field is not present in the launchitem, will
283
- # return a Kotoba wfid
284
- end
271
+ @field_name = field_name
285
272
  end
286
273
 
287
- #
288
- # A wfid generator that uses any underlying "uuidgen" command it might
289
- # find.
290
- # By default, it favours "uuidgen -t".
291
- #
292
- # You can specifying a command by passing a :uuid_command param in the
293
- # application context, or simply by overriding the generate() method.
294
- #
295
- class UuidWfidGenerator < Service
296
-
297
- COMMANDS = [
298
- "uuidgen -t",
299
- "uuidgen"
300
- ]
301
-
302
- def initialize (service_name, application_context)
303
-
304
- super
305
-
306
- @command = @application_context[:uuid_command] \
307
- if @application_context
308
-
309
- unless @command
310
- COMMANDS.each do |c|
311
- c = "#{c} 2> /dev/null"
312
- s = `#{c}`
313
- h = s[0, 8].hex
314
- if h > 0
315
- @command = c
316
- break
317
- end
318
- end
319
- end
274
+ def generate (launchitem=nil)
320
275
 
321
- raise "no command found for generating an uuid found..." \
322
- unless @command
276
+ return super unless launchitem
323
277
 
324
- linfo { "new() command that will be used : '#{@command}'" }
325
- end
278
+ wfid = launchitem.attributes[@field_name]
326
279
 
327
- #
328
- # Generates a brand new UUID
329
- #
330
- # The launchitem parameter is not used by this generator.
331
- #
332
- def generate (launchitem=nil)
280
+ return wfid.to_s if wfid
333
281
 
334
- `#{@command}`.chomp
282
+ super
283
+ #
284
+ # if the field is not present in the launchitem, will
285
+ # return a Kotoba wfid
286
+ end
287
+ end
288
+
289
+ #
290
+ # A wfid generator that uses any underlying "uuidgen" command it might
291
+ # find.
292
+ # By default, it favours "uuidgen -t".
293
+ #
294
+ # You can specifying a command by passing a :uuid_command param in the
295
+ # application context, or simply by overriding the generate() method.
296
+ #
297
+ class UuidWfidGenerator < Service
298
+
299
+ COMMANDS = [
300
+ "uuidgen -t",
301
+ "uuidgen"
302
+ ]
303
+
304
+ def initialize (service_name, application_context)
305
+
306
+ super
307
+
308
+ @command = @application_context[:uuid_command] \
309
+ if @application_context
310
+
311
+ unless @command
312
+ COMMANDS.each do |c|
313
+ c = "#{c} 2> /dev/null"
314
+ s = `#{c}`
315
+ h = s[0, 8].hex
316
+ if h > 0
317
+ @command = c
318
+ break
319
+ end
335
320
  end
321
+ end
336
322
 
337
- #
338
- # Is a simple call to OpenWFE::split_wfid()
339
- #
340
- def split_wfid (wfid)
323
+ raise "no command found for generating an uuid found..." \
324
+ unless @command
341
325
 
342
- OpenWFE.split_wfid(wfid)
343
- end
326
+ linfo { "new() command that will be used : '#{@command}'" }
327
+ end
344
328
 
345
- #
346
- # This method is called by OpenWFE::split_wfid() when it has detected
347
- # a wfid that is a UUID.
348
- #
349
- # Splits the first part of the uuid (will be used for the
350
- # expression storage directory structure).
351
- #
352
- def self.split_wfid (wfid)
329
+ #
330
+ # Generates a brand new UUID
331
+ #
332
+ # The launchitem parameter is not used by this generator.
333
+ #
334
+ def generate (launchitem=nil)
353
335
 
354
- s = wfid[0, 8]
355
- a = []
356
- 4.times do |i|
357
- a << s[i*2, 2]
358
- end
359
- a
360
- end
336
+ `#{@command}`.chomp
361
337
  end
362
338
 
363
339
  #
364
- # "module methods"
340
+ # Is a simple call to OpenWFE::split_wfid()
365
341
  #
342
+ def split_wfid (wfid)
366
343
 
367
- SPLIT_MAP = {
368
- "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}" => UuidWfidGenerator,
369
- "[0-9]{8}-[a-z]*" => KotobaWfidGenerator
370
- }
344
+ OpenWFE.split_wfid(wfid)
345
+ end
371
346
 
372
347
  #
373
- # This method should be able to split any wfid whose scheme is implemented
374
- # here.
348
+ # This method is called by OpenWFE::split_wfid() when it has detected
349
+ # a wfid that is a UUID.
375
350
  #
376
- def OpenWFE.split_wfid (wfid)
351
+ # Splits the first part of the uuid (will be used for the
352
+ # expression storage directory structure).
353
+ #
354
+ def self.split_wfid (wfid)
355
+
356
+ s = wfid[0, 8]
357
+ a = []
358
+ 4.times do |i|
359
+ a << s[i*2, 2]
360
+ end
361
+ a
362
+ end
363
+ end
377
364
 
378
- SPLIT_MAP.each do |regex, clazz|
379
- return clazz.split_wfid(wfid) if wfid.match(regex)
380
- end
381
- #
382
- # else
383
- #
384
- DefaultWfidGenerator.split_wfid(wfid)
365
+ #
366
+ # "module methods"
367
+ #
368
+
369
+ SPLIT_MAP = {
370
+ "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}" => UuidWfidGenerator,
371
+ "[0-9]{8}-[a-z]*" => KotobaWfidGenerator
372
+ }
373
+
374
+ #
375
+ # This method should be able to split any wfid whose scheme is implemented
376
+ # here.
377
+ #
378
+ def OpenWFE.split_wfid (wfid)
379
+
380
+ SPLIT_MAP.each do |regex, clazz|
381
+ return clazz.split_wfid(wfid) if wfid.match(regex)
385
382
  end
383
+ #
384
+ # else
385
+ #
386
+ DefaultWfidGenerator.split_wfid(wfid)
387
+ end
386
388
 
387
389
  end
388
390