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
@@ -0,0 +1,165 @@
1
+ #--
2
+ # Copyright (c) 2007-2009, Tomaso Tosolini, John Mettraux, OpenWFE.org
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 Italy.
23
+ #++
24
+
25
+
26
+ require 'openwfe/omixins'
27
+ require 'openwfe/expool/errorjournal'
28
+ require 'openwfe/extras/singlecon'
29
+
30
+
31
+ module OpenWFE::Extras
32
+
33
+ #
34
+ # A migration for creating/dropping the "process errors" table, the
35
+ # content of this table makes up for an error journal.
36
+ #
37
+ # There is one record per process error, the log journal can be
38
+ # easily rebuilt by doing find_all_by_wfid().
39
+ #
40
+ class ProcessErrorTables < ActiveRecord::Migration
41
+
42
+ def self.up
43
+
44
+ create_table :process_errors do |t|
45
+
46
+ t.column :created_at, :timestamp
47
+ t.column :wfid, :string, :null => false
48
+ t.column :expid, :string, :null => false
49
+
50
+ t.column :svalue, :text, :null => false
51
+ # 'value' could be reserved, using 'svalue' instead
52
+ # It stands for 'serialized value'.
53
+ end
54
+ add_index :process_errors, :created_at
55
+ add_index :process_errors, :wfid
56
+ add_index :process_errors, :expid
57
+ end
58
+
59
+ def self.down
60
+
61
+ drop_table :process_errors
62
+ end
63
+ end
64
+
65
+ #
66
+ # The active record for process errors. Not much to say.
67
+ #
68
+ class ProcessError < ActiveRecord::Base
69
+ include SingleConnectionMixin
70
+
71
+ #serialize :svalue, OpenWFE::ProcessError
72
+ serialize :svalue
73
+
74
+ #
75
+ # Returns the OpenWFE process error, as serialized
76
+ # (but takes care of setting its db_id)
77
+ #
78
+ def as_owfe_error
79
+
80
+ result = svalue
81
+ class << result
82
+ attr_accessor :db_id
83
+ end
84
+ result.db_id = id
85
+ result
86
+ end
87
+
88
+ alias :owfe_error :as_owfe_error
89
+ end
90
+
91
+ #
92
+ # A database backed error journal.
93
+ #
94
+ # (no synchronization needed it seems)
95
+ #
96
+ class DbErrorJournal < OpenWFE::ErrorJournal
97
+ include OpenWFE::FeiMixin
98
+
99
+ #
100
+ # Returns the error log for a given workflow/process instance,
101
+ # the older error first.
102
+ #
103
+ def get_error_log (wfid)
104
+
105
+ wfid = extract_wfid(wfid, true)
106
+ errors = ProcessError.find_all_by_wfid(wfid, :order => 'id asc')
107
+ errors.collect { |e| e.as_owfe_error }
108
+ end
109
+
110
+ #
111
+ # Erases all the errors for one given workflow/process instance.
112
+ #
113
+ def remove_error_log (wfid)
114
+
115
+ ProcessError.destroy_all([ 'wfid = ?', wfid ])
116
+ end
117
+
118
+ #
119
+ # Returns a map wfid => error log, ie returns 1 error log for
120
+ # each workflow/process instance that encountered an error.
121
+ #
122
+ def get_error_logs
123
+
124
+ ProcessError.find(:all).inject({}) do |h, e|
125
+ (h[e.wfid] ||= []) << e.as_owfe_error; h
126
+ end
127
+ end
128
+
129
+ #
130
+ # Removes a set of errors. This is used by the expool when
131
+ # resuming a previously broken process instance.
132
+ #
133
+ def remove_errors (wfid, errors)
134
+
135
+ Array(errors).each do |e|
136
+ ProcessError.delete(e.db_id)
137
+ end
138
+ end
139
+
140
+ protected
141
+
142
+ #
143
+ # This is the inner method used by the error journal to
144
+ # record a process error (instance of OpenWFE::ProcessError)
145
+ # that it observed in the expression pool.
146
+ #
147
+ # This method will throw an exception in case of trouble with
148
+ # the database.
149
+ #
150
+ def record_error (process_error)
151
+
152
+ e = OpenWFE::Extras::ProcessError.new
153
+
154
+ e.created_at = process_error.date
155
+ # making sure they are, well, in sync
156
+
157
+ e.wfid = process_error.wfid
158
+ e.expid = process_error.fei.expid
159
+ e.svalue = process_error
160
+
161
+ e.save_without_transactions!
162
+ end
163
+ end
164
+ end
165
+
@@ -0,0 +1,73 @@
1
+ #--
2
+ # Copyright (c) 2007-2009, Tomaso Tosolini, John Mettraux OpenWFE.org
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 Italy.
23
+ #++
24
+
25
+ require 'openwfe/expool/threaded_expstorage'
26
+ require 'openwfe/extras/expool/ar_expstorage'
27
+
28
+
29
+ module OpenWFE::Extras
30
+
31
+ #
32
+ # DEPRECATED !! use openwfe/extras/expool/ar_expstorage instead
33
+ #
34
+ # An extension of ArExpressionStorage that always stores its expression
35
+ # as YAML (way slower than the default Marshal, but Marshal version
36
+ # may differ over time).
37
+ #
38
+ # If you need to migrate from yaml to marshal and back (and other storage
39
+ # variants), have a look at work/pooltool.ru
40
+ #
41
+ class DbExpressionStorage < ArExpressionStorage
42
+
43
+ #
44
+ # Constructor.
45
+ #
46
+ def initialize (service_name, application_context)
47
+
48
+ application_context[:persist_as_yaml] = true
49
+
50
+ super
51
+ end
52
+ end
53
+
54
+ #
55
+ # A DbExpressionStorage that does less work, for more performance,
56
+ # thanks to the ThreadedStorageMixin.
57
+ #
58
+ # DEPRECATED. Use ArExpressionStorage.
59
+ #
60
+ class ThreadedDbExpressionStorage < DbExpressionStorage
61
+ include OpenWFE::ThreadedStorageMixin
62
+
63
+ def initialize (service_name, application_context)
64
+
65
+ super
66
+
67
+ start_queue
68
+ #
69
+ # which sets @thread_id
70
+ end
71
+ end
72
+ end
73
+
@@ -0,0 +1,163 @@
1
+ #--
2
+ # Copyright (c) 2008-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.
23
+ #++
24
+
25
+
26
+ require 'openwfe/expool/history'
27
+ require 'openwfe/extras/singlecon'
28
+
29
+
30
+ module OpenWFE::Extras
31
+
32
+ #
33
+ # The migration for the DbHistory table
34
+ #
35
+ class HistoryTables < ActiveRecord::Migration
36
+
37
+ def self.up
38
+
39
+ create_table :history do |t|
40
+
41
+ t.column :created_at, :timestamp
42
+ t.column :source, :string, :null => false
43
+ t.column :event, :string, :null => false
44
+ t.column :wfid, :string
45
+ t.column :wfname, :string
46
+ t.column :wfrevision, :string
47
+ t.column :fei, :string
48
+ t.column :participant, :string
49
+ t.column :message, :string # empty is ok
50
+ end
51
+
52
+ add_index :history, :created_at
53
+ add_index :history, :source
54
+ add_index :history, :event
55
+ add_index :history, :wfid
56
+ add_index :history, :wfname
57
+ add_index :history, :wfrevision
58
+ add_index :history, :participant
59
+ end
60
+
61
+ def self.down
62
+
63
+ drop_table :history
64
+ end
65
+ end
66
+
67
+ #
68
+ # The active record for process errors. Not much to say.
69
+ #
70
+ class HistoryEntry < ActiveRecord::Base
71
+ include SingleConnectionMixin
72
+
73
+ set_table_name('history')
74
+
75
+ #
76
+ # returns a FlowExpressionId instance if the entry has a 'fei' or
77
+ # nil instead.
78
+ #
79
+ def full_fei
80
+
81
+ self.fei ? OpenWFE::FlowExpressionId.from_s(self.fei) : nil
82
+ end
83
+
84
+ #
85
+ # Directly logs an event (may throw an exception)
86
+ #
87
+ def self.log! (source, event, opts={})
88
+
89
+ fei = opts[:fei]
90
+
91
+ if fei
92
+ opts[:wfid] = fei.parent_wfid
93
+ opts[:wfname] = fei.wfname
94
+ opts[:wfrevision] = fei.wfrevision
95
+ opts[:fei] = fei.to_s
96
+ end
97
+
98
+ opts[:source] = source.to_s
99
+ opts[:event] = event.to_s
100
+
101
+ #self.new(opts).save!
102
+ self.new(opts).save_without_transactions!
103
+ #begin
104
+ # self.new(opts).save!
105
+ #rescue Exception => e
106
+ # puts ; puts e
107
+ # self.new(opts).save! rescue nil
108
+ #end
109
+ end
110
+ end
111
+
112
+ class DbHistory < OpenWFE::History
113
+
114
+ #def initialize (service_name, application_context)
115
+ # super
116
+ #end
117
+
118
+ def log (source, event, *args)
119
+
120
+ do_log(source, event, *args)
121
+ end
122
+
123
+ protected
124
+
125
+ def do_log (source, event, *args)
126
+
127
+ fei = get_fei(args)
128
+ wi = get_workitem(args)
129
+
130
+ begin
131
+
132
+ HistoryEntry.log!(
133
+ source, event,
134
+ :fei => fei,
135
+ :message => get_message(source, event, args),
136
+ :participant => wi.respond_to?(:participant_name) ?
137
+ wi.participant_name : nil)
138
+
139
+ rescue Exception => e
140
+ #p e
141
+ lerror { "db_history logging failure : #{e}" }
142
+ end
143
+ end
144
+ end
145
+
146
+ #
147
+ # An extension of the DbHistory that uses the engine's workqueue. Insertions
148
+ # into database are queued (as well as expool events).
149
+ #
150
+ # Seems to be slightly faster (0.8s gain for a 11s test).
151
+ #
152
+ # Currently in use in ruote-rest.
153
+ #
154
+ class QueuedDbHistory < DbHistory
155
+
156
+ def log (source, event, *args)
157
+
158
+ get_workqueue.push(self, :do_log, source, event, *args)
159
+ end
160
+ end
161
+
162
+ end
163
+
@@ -0,0 +1,327 @@
1
+ #--
2
+ # Copyright (c) 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.
23
+ #++
24
+
25
+
26
+ require 'base64'
27
+
28
+ require 'dm-core'
29
+
30
+ require 'openwfe/service'
31
+ require 'openwfe/rudefinitions'
32
+ require 'openwfe/expool/expstorage'
33
+
34
+
35
+ module OpenWFE::Extras
36
+
37
+ #
38
+ # The datamapper resource class for Ruote expressions.
39
+ #
40
+ class DmExpression
41
+ include DataMapper::Resource
42
+
43
+ property :fei, String, :key => true
44
+ property :wfid, String, :index => :wfid
45
+ property :expid, String, :index => :expid
46
+ property :expclass, String, :index => :expclass
47
+ property :svalue, Text
48
+
49
+ def svalue= (fexp)
50
+
51
+ attribute_set(:svalue, Base64.encode64(Marshal.dump(fexp)))
52
+ end
53
+
54
+ def as_owfe_expression (application_context)
55
+
56
+ fe = Marshal.load(Base64.decode64(self.svalue))
57
+ fe.application_context = application_context
58
+ fe
59
+ end
60
+
61
+ def self.storage_name (repository_name = default_repository_name)
62
+ 'dm_expressions'
63
+ end
64
+ end
65
+
66
+ #
67
+ # Storing Ruote's flow expressions via DataMapper.
68
+ #
69
+ class DmExpressionStorage
70
+
71
+ include OpenWFE::ServiceMixin
72
+ include OpenWFE::OwfeServiceLocator
73
+ include OpenWFE::ExpressionStorageBase
74
+
75
+ attr_accessor :dm_repository
76
+
77
+ #
78
+ # Instantiates a DmExpressionStorage service. (Where dm stands for
79
+ # Data Mapper).
80
+ #
81
+ def initialize (service_name, application_context)
82
+
83
+ super()
84
+ service_init(service_name, application_context)
85
+
86
+ @dm_repository =
87
+ application_context[:expstorage_dm_repository] || :default
88
+
89
+ DataMapper.repository(@dm_repository) {
90
+ DmExpression.auto_upgrade!
91
+ }
92
+
93
+ observe_expool
94
+ end
95
+
96
+ #
97
+ # Stores an expression.
98
+ #
99
+ def []= (fei, flow_expression)
100
+
101
+ DataMapper.repository(@dm_repository) {
102
+
103
+ e = find(fei) || DmExpression.new
104
+
105
+ e.fei = fei.as_string_key
106
+ e.wfid = fei.wfid
107
+ e.expid = fei.expid
108
+ e.expclass = flow_expression.class.name
109
+ e.svalue = flow_expression
110
+
111
+ e.save
112
+ }
113
+ end
114
+
115
+ #
116
+ # Retrieves a flow expression.
117
+ #
118
+ def [] (fei)
119
+
120
+ if e = find(fei)
121
+ e.as_owfe_expression(self.application_context)
122
+ else
123
+ nil
124
+ end
125
+ end
126
+
127
+ #
128
+ # Finds the DmExpression instance with the given fei (FlowExpressionId)
129
+ #
130
+ def find (fei)
131
+
132
+ DataMapper.repository(@dm_repository) {
133
+ DmExpression.first(:fei => fei.as_string_key)
134
+ }
135
+ end
136
+
137
+ #
138
+ # Returns true if there is a FlowExpression stored with the given id.
139
+ #
140
+ def has_key? (fei)
141
+
142
+ (self[fei] != nil)
143
+ end
144
+
145
+ #
146
+ # Deletes a flow expression.
147
+ #
148
+ def delete (fei)
149
+
150
+ e = find(fei)
151
+ e.destroy if e
152
+ end
153
+
154
+ #
155
+ # Returns the count of expressions currently stored.
156
+ #
157
+ def size
158
+
159
+ DataMapper.repository(@dm_repository) { DmExpression.count }
160
+ end
161
+
162
+ alias :length :size
163
+
164
+ #
165
+ # Danger ! Will remove all the expressions in the database.
166
+ #
167
+ def purge
168
+
169
+ DataMapper.repository(@dm_repository) {
170
+
171
+ DmExpression.all.each { |de| de.destroy }
172
+ #
173
+ # TODO : find simpler way to do that
174
+ }
175
+ end
176
+
177
+ #
178
+ # Gather expressions matching certain parameters.
179
+ #
180
+ def find_expressions (options={})
181
+
182
+ #conditions = determine_conditions(options)
183
+ # note : this call modifies the options hash...
184
+
185
+ conditions = {}
186
+
187
+ #
188
+ # maximize usage of SQL querying
189
+
190
+ exps = DataMapper.repository(@dm_repository) {
191
+ DmExpression.all(conditions)
192
+ }
193
+
194
+ #
195
+ # do the rest of the filtering
196
+
197
+ exps.inject([]) { |a, de|
198
+ fe = de.as_owfe_expression(application_context)
199
+ a << fe if does_match?(options, fe)
200
+ a
201
+ }
202
+ end
203
+
204
+ #
205
+ # Fetches the root of a process instance.
206
+ #
207
+ def fetch_root (wfid)
208
+
209
+ exps = DataMapper.repository(@dm_repository) {
210
+
211
+ DmExpression.all(
212
+ :wfid => wfid,
213
+ :expclass => OpenWFE::Definition.to_s,
214
+ :order => [ :expid.asc ])
215
+ }
216
+
217
+ #e = exps.sort { |fe1, fe2| fe1.fei.expid <=> fe2.fei.expid }[0]
218
+ e = exps.first
219
+
220
+ e ? e.as_owfe_expression(self.application_context) : nil
221
+ end
222
+
223
+ #
224
+ # Used only by work/pooltool.ru for storage migrations.
225
+ #
226
+ def each
227
+
228
+ return unless block_given?
229
+
230
+ exps = DataMapper.repository(@dm_repository) { DmExpression.all }
231
+
232
+ exps.each do |de|
233
+ fe = de.as_owfe_expression(self.application_context)
234
+ yield(fe.fei, fe)
235
+ end
236
+ end
237
+
238
+ #
239
+ # Closes the underlying database... Does nothing in this implementation.
240
+ #
241
+ def close
242
+
243
+ # nothing to do here.
244
+ end
245
+
246
+ # protected
247
+ #
248
+ # #
249
+ # # Grabs the options to build a conditions array for use by
250
+ # # find().
251
+ # #
252
+ # # Note : this method, modifies the options hash (it removes
253
+ # # the args it needs).
254
+ # #
255
+ # def determine_conditions (options)
256
+ #
257
+ # wfid = options.delete :wfid
258
+ # wfid_prefix = options.delete :wfid_prefix
259
+ # #parent_wfid = options.delete :parent_wfid
260
+ #
261
+ # query = []
262
+ # conditions = []
263
+ #
264
+ # if wfid
265
+ # query << 'wfid = ?'
266
+ # conditions << wfid
267
+ # elsif wfid_prefix
268
+ # query << 'wfid LIKE ?'
269
+ # conditions << "#{wfid_prefix}%"
270
+ # end
271
+ #
272
+ # add_class_conditions(options, query, conditions)
273
+ #
274
+ # conditions = conditions.flatten
275
+ #
276
+ # if conditions.size < 1
277
+ # nil
278
+ # else
279
+ # conditions.insert(0, query.join(' AND '))
280
+ # end
281
+ # end
282
+ #
283
+ # #
284
+ # # Used by determine_conditions().
285
+ # #
286
+ # def add_class_conditions (options, query, conditions)
287
+ #
288
+ # ic = options.delete :include_classes
289
+ # ic = Array(ic)
290
+ #
291
+ # ec = options.delete :exclude_classes
292
+ # ec = Array(ec)
293
+ #
294
+ # acc ic, query, conditions, 'OR'
295
+ # acc ec, query, conditions, 'AND'
296
+ # end
297
+ #
298
+ # def acc (classes, query, conditions, join)
299
+ #
300
+ # return if classes.size < 1
301
+ #
302
+ # classes = classes.collect do |kind|
303
+ # get_expression_map.get_expression_classes kind
304
+ # end
305
+ # classes = classes.flatten
306
+ #
307
+ # quer = []
308
+ # cond = []
309
+ # classes.each do |cl|
310
+ #
311
+ # quer << if join == 'AND'
312
+ # 'exp_class != ?'
313
+ # else
314
+ # 'exp_class = ?'
315
+ # end
316
+ #
317
+ # cond << cl.to_s
318
+ # end
319
+ # quer = quer.join(" #{join} ")
320
+ #
321
+ # query << "(#{quer})"
322
+ # conditions << cond
323
+ # end
324
+
325
+ end
326
+ end
327
+