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.
- data/README.txt +16 -6
- data/examples/engine_template.rb +6 -43
- data/examples/quickstart.rb +87 -0
- data/examples/quotereporter.rb +42 -49
- data/examples/simple.rb +56 -0
- data/lib/openwfe.rb +20 -34
- data/lib/openwfe/contextual.rb +45 -36
- data/lib/openwfe/def.rb +21 -30
- data/lib/openwfe/engine.rb +17 -26
- data/lib/openwfe/engine/engine.rb +132 -397
- data/lib/openwfe/engine/expool_methods.rb +34 -122
- data/lib/openwfe/engine/file_persisted_engine.rb +39 -60
- data/lib/openwfe/engine/fs_engine.rb +54 -0
- data/lib/openwfe/engine/launch_methods.rb +245 -0
- data/lib/openwfe/engine/listener_methods.rb +128 -0
- data/lib/openwfe/engine/lookup_methods.rb +156 -0
- data/lib/openwfe/engine/participant_methods.rb +60 -52
- data/lib/openwfe/engine/status_methods.rb +102 -97
- data/lib/openwfe/engine/tc_engine.rb +55 -0
- data/lib/openwfe/engine/tt_engine.rb +55 -0
- data/lib/openwfe/engine/update_exp_methods.rb +46 -39
- data/lib/openwfe/expool/def_parser.rb +196 -0
- data/lib/openwfe/expool/errorjournal.rb +51 -219
- data/lib/openwfe/expool/errors.rb +69 -0
- data/lib/openwfe/expool/expool_pause_methods.rb +32 -43
- data/lib/openwfe/expool/expressionpool.rb +398 -594
- data/lib/openwfe/expool/expstorage.rb +68 -72
- data/lib/openwfe/expool/fs_expstorage.rb +302 -0
- data/lib/openwfe/expool/history.rb +54 -38
- data/lib/openwfe/expool/journal.rb +24 -38
- data/lib/openwfe/expool/journal_replay.rb +20 -36
- data/lib/openwfe/expool/representation.rb +62 -78
- data/lib/openwfe/expool/tc_expstorage.rb +239 -0
- data/lib/openwfe/expool/{threadedexpstorage.rb → threaded_expstorage.rb} +25 -53
- data/lib/openwfe/expool/tt_expstorage.rb +55 -0
- data/lib/openwfe/expool/wfidgen.rb +23 -43
- data/lib/openwfe/expool/yaml_errorjournal.rb +187 -0
- data/lib/openwfe/expressions/condition.rb +33 -58
- data/lib/openwfe/expressions/environment.rb +62 -76
- data/lib/openwfe/expressions/{expressionmap.rb → expression_map.rb} +40 -54
- data/lib/openwfe/expressions/expression_tree.rb +265 -0
- data/lib/openwfe/expressions/fe_cancel.rb +19 -39
- data/lib/openwfe/expressions/fe_command.rb +80 -84
- data/lib/openwfe/expressions/fe_concurrence.rb +250 -313
- data/lib/openwfe/expressions/fe_cron.rb +38 -55
- data/lib/openwfe/expressions/fe_cursor.rb +49 -74
- data/lib/openwfe/expressions/fe_define.rb +44 -90
- data/lib/openwfe/expressions/fe_do.rb +83 -70
- data/lib/openwfe/expressions/fe_equals.rb +17 -35
- data/lib/openwfe/expressions/fe_error.rb +103 -0
- data/lib/openwfe/expressions/fe_filter.rb +27 -44
- data/lib/openwfe/expressions/fe_filter_definition.rb +37 -54
- data/lib/openwfe/expressions/fe_fqv.rb +46 -65
- data/lib/openwfe/expressions/fe_http.rb +17 -31
- data/lib/openwfe/expressions/fe_if.rb +39 -55
- data/lib/openwfe/expressions/fe_iterator.rb +25 -42
- data/lib/openwfe/expressions/fe_listen.rb +71 -115
- data/lib/openwfe/expressions/fe_losfor.rb +34 -43
- data/lib/openwfe/expressions/fe_misc.rb +70 -109
- data/lib/openwfe/expressions/fe_participant.rb +61 -99
- data/lib/openwfe/expressions/fe_reserve.rb +28 -59
- data/lib/openwfe/expressions/fe_save.rb +62 -81
- data/lib/openwfe/expressions/fe_sequence.rb +45 -70
- data/lib/openwfe/expressions/fe_set.rb +22 -40
- data/lib/openwfe/expressions/fe_step.rb +22 -37
- data/lib/openwfe/expressions/fe_subprocess.rb +34 -55
- data/lib/openwfe/expressions/fe_timeout.rb +28 -44
- data/lib/openwfe/expressions/fe_wait.rb +142 -36
- data/lib/openwfe/expressions/fe_when.rb +22 -46
- data/lib/openwfe/expressions/filter.rb +24 -43
- data/lib/openwfe/expressions/flowexpression.rb +211 -192
- data/lib/openwfe/expressions/iterator.rb +24 -39
- data/lib/openwfe/expressions/merge.rb +30 -52
- data/lib/openwfe/expressions/raw.rb +168 -384
- data/lib/openwfe/expressions/rprocdef.rb +79 -76
- data/lib/openwfe/expressions/time.rb +89 -103
- data/lib/openwfe/expressions/timeout.rb +98 -92
- data/lib/openwfe/expressions/value.rb +43 -69
- data/lib/openwfe/extras/engine/ar_engine.rb +58 -0
- data/lib/openwfe/extras/engine/db_persisted_engine.rb +37 -57
- data/lib/openwfe/extras/engine/dm_engine.rb +59 -0
- data/lib/openwfe/extras/expool/ar_expstorage.rb +337 -0
- data/lib/openwfe/extras/expool/db_errorjournal.rb +165 -0
- data/lib/openwfe/extras/expool/db_expstorage.rb +73 -0
- data/lib/openwfe/extras/expool/db_history.rb +163 -0
- data/lib/openwfe/extras/expool/dm_expstorage.rb +327 -0
- data/lib/openwfe/extras/listeners/jabber_listeners.rb +102 -0
- data/lib/openwfe/extras/listeners/jabberlisteners.rb +26 -0
- data/lib/openwfe/extras/listeners/sqs_listeners.rb +128 -0
- data/lib/openwfe/extras/misc/activityfeed.rb +19 -34
- data/lib/openwfe/extras/misc/jabber_common.rb +122 -0
- data/lib/openwfe/extras/participants/active_participants.rb +724 -0
- data/lib/openwfe/extras/participants/active_resource_participants.rb +213 -0
- data/lib/openwfe/extras/participants/activeparticipants.rb +1 -747
- data/lib/openwfe/extras/participants/ar_participants.rb +285 -0
- data/lib/openwfe/extras/participants/atomfeed_participants.rb +19 -34
- data/lib/openwfe/extras/participants/atompub_participants.rb +19 -34
- data/lib/openwfe/extras/participants/basecamp_participants.rb +17 -31
- data/lib/openwfe/extras/participants/{csvparticipants.rb → decision_participants.rb} +17 -31
- data/lib/openwfe/extras/participants/jabber_participants.rb +147 -0
- data/lib/openwfe/extras/participants/jabberparticipants.rb +3 -0
- data/lib/openwfe/extras/participants/sqs_participants.rb +108 -0
- data/lib/openwfe/extras/participants/{twitterparticipants.rb → twitter_participants.rb} +20 -34
- data/lib/openwfe/extras/singlecon.rb +56 -0
- data/lib/openwfe/filterdef.rb +83 -65
- data/lib/openwfe/flowexpressionid.rb +99 -62
- data/lib/openwfe/listeners/listener.rb +54 -65
- data/lib/openwfe/listeners/listeners.rb +52 -56
- data/lib/openwfe/logging.rb +17 -31
- data/lib/openwfe/omixins.rb +25 -58
- data/lib/openwfe/participants.rb +1 -34
- data/lib/openwfe/participants/{enoparticipants.rb → mail_participants.rb} +33 -47
- data/lib/openwfe/participants/participant.rb +37 -36
- data/lib/openwfe/participants/participant_map.rb +245 -0
- data/lib/openwfe/participants/participants.rb +43 -69
- data/lib/openwfe/participants/{soapparticipants.rb → soap_participants.rb} +22 -36
- data/lib/openwfe/participants/{storeparticipants.rb → store_participants.rb} +57 -62
- data/lib/openwfe/{storage/yamlfilestorage.rb → participants/yaml_filestorage.rb} +35 -64
- data/lib/openwfe/representations.rb +770 -0
- data/lib/openwfe/rudefinitions.rb +17 -29
- data/lib/openwfe/service.rb +21 -32
- data/lib/openwfe/tools/flowtracer.rb +21 -35
- data/lib/openwfe/util/dollar.rb +48 -61
- data/lib/openwfe/util/irb.rb +19 -34
- data/lib/openwfe/util/json.rb +55 -0
- data/lib/openwfe/util/observable.rb +22 -41
- data/lib/openwfe/util/ometa.rb +21 -35
- data/lib/openwfe/util/treechecker.rb +17 -31
- data/lib/openwfe/util/workqueue.rb +45 -44
- data/lib/openwfe/util/xml.rb +80 -234
- data/lib/openwfe/utils.rb +67 -110
- data/lib/openwfe/version.rb +19 -27
- data/lib/openwfe/workitem.rb +119 -84
- data/lib/openwfe/worklist/storelocks.rb +17 -33
- data/lib/openwfe/worklist/storeparticipant.rb +1 -39
- data/lib/openwfe/worklist/worklist.rb +17 -31
- data/lib/pooltool.ru +311 -0
- data/test/{extras/active_connection.rb → ar_test_connection.rb} +26 -11
- data/test/bm/fatxml.rb +70 -0
- data/test/bm/load_26c.rb +79 -0
- data/test/dm_test_connection.rb +11 -0
- data/test/extras/base.rb +3 -0
- data/test/extras/et_0_sqs.rb +37 -0
- data/test/extras/et_jabber_test.rb +226 -0
- data/test/extras/test.rb +16 -0
- data/test/functional/base.rb +198 -0
- data/test/functional/db_ft_0_ar_participants.rb +136 -0
- data/test/functional/eft_0_process_definition.rb +34 -0
- data/test/functional/eft_10_unset.rb +60 -0
- data/test/functional/eft_11_sleep.rb +95 -0
- data/test/functional/eft_12_wait.rb +57 -0
- data/test/functional/eft_13_cursor.rb +139 -0
- data/test/functional/eft_14_loop.rb +36 -0
- data/test/functional/eft_15_undo.rb +77 -0
- data/test/functional/eft_16_redo.rb +88 -0
- data/test/functional/eft_1_print.rb +57 -0
- data/test/functional/eft_2_sequence.rb +47 -0
- data/test/functional/eft_3_equals.rb +98 -0
- data/test/functional/eft_4_if.rb +96 -0
- data/test/functional/eft_5_eval.rb +89 -0
- data/test/functional/eft_6_reval.rb +101 -0
- data/test/functional/eft_7_exp.rb +47 -0
- data/test/functional/eft_8_log.rb +50 -0
- data/test/functional/eft_9_set.rb +132 -0
- data/test/functional/engine_helper.rb +122 -0
- data/test/functional/ft_0_vars_at_launch.rb +27 -0
- data/test/functional/ft_1_process_status.rb +46 -0
- data/test/functional/ft_2_file_listener.rb +45 -0
- data/test/functional/ft_3_on_cancel.rb +171 -0
- data/test/functional/ft_4_on_error.rb +220 -0
- data/test/functional/ft_5_process_uri.rb +82 -0
- data/test/functional/ft_6_process_status.rb +62 -0
- data/test/functional/ft_7_parameters.rb +103 -0
- data/test/functional/ft_8_dollar.rb +53 -0
- data/test/functional/ft_9_register_participants.rb +119 -0
- data/test/functional/restart_base.rb +43 -0
- data/test/functional/rft_0_sleep.rb +76 -0
- data/test/functional/test.rb +24 -0
- data/test/path_helper.rb +12 -0
- data/test/test.rb +11 -1
- data/test/{rutest_utils.rb → test_helper.rb} +8 -31
- data/test/unit/test.rb +19 -0
- data/test/{fei_test.rb → unit/ut_0_fei.rb} +34 -49
- data/test/unit/ut_10_lookup_attribute.rb +86 -0
- data/test/unit/ut_11_filter.rb +124 -0
- data/test/{condition_test.rb → unit/ut_12_conditional.rb} +33 -40
- data/test/unit/ut_13_xmlutil.rb +57 -0
- data/test/unit/ut_14_var_field_lookup.rb +85 -0
- data/test/{fe_lookup_att_test.rb → unit/ut_15_fe_att_lookup.rb} +14 -21
- data/test/{storage_test.rb → unit/ut_16_expstorage_findexp.rb} +3 -9
- data/test/unit/ut_17_representations.rb +330 -0
- data/test/{hash_test.rb → unit/ut_17b_representations_hash.rb} +25 -21
- data/test/{slock_test.rb → unit/ut_18_store_lock.rb} +17 -20
- data/test/{wfid_test.rb → unit/ut_1_wfid.rb} +2 -73
- data/test/unit/ut_2_utils.rb +53 -0
- data/test/unit/ut_3_expmap.rb +65 -0
- data/test/{clone_test.rb → unit/ut_4_fulldup.rb} +41 -46
- data/test/{obs_test.rb → unit/ut_5_observable.rb} +9 -19
- data/test/unit/ut_6_treechecker.rb +101 -0
- data/test/unit/ut_7_parser_ruby.rb +344 -0
- data/test/unit/ut_7b_parser_ruby.rb +56 -0
- data/test/{description_test.rb → unit/ut_8_parser_description.rb} +8 -19
- data/test/unit/ut_9_workitem.rb +72 -0
- metadata +117 -234
- data/lib/openwfe/exceptions.rb +0 -51
- data/lib/openwfe/expool/parser.rb +0 -278
- data/lib/openwfe/expool/paused_error.rb +0 -77
- data/lib/openwfe/expool/yamlexpstorage.rb +0 -224
- data/lib/openwfe/expressions/fe_sleep.rb +0 -173
- data/lib/openwfe/extras/expool/dberrorjournal.rb +0 -189
- data/lib/openwfe/extras/expool/dbexpstorage.rb +0 -355
- data/lib/openwfe/extras/expool/dbhistory.rb +0 -135
- data/lib/openwfe/extras/listeners/sqslisteners.rb +0 -146
- data/lib/openwfe/extras/participants/sqsparticipants.rb +0 -125
- data/lib/openwfe/listeners/socketlisteners.rb +0 -272
- data/lib/openwfe/orest/definitions.rb +0 -113
- data/lib/openwfe/orest/osocket.rb +0 -148
- data/lib/openwfe/orest/xmlcodec.rb +0 -682
- data/lib/openwfe/participants/participantmap.rb +0 -249
- data/lib/openwfe/participants/socketparticipants.rb +0 -202
- data/lib/openwfe/storage/yamlcustom.rb +0 -106
- data/lib/openwfe/worklist/oldrest.rb +0 -244
- data/test/README.txt +0 -27
- data/test/back_0916_test.rb +0 -109
- data/test/bm/bm_1_xml_vs_prog.rb +0 -59
- data/test/bm/bm_2_step.rb +0 -109
- data/test/bm/ft_0f_5ms.rb +0 -35
- data/test/bm/ft_26_load.rb +0 -208
- data/test/bm/ft_26b_load.rb +0 -84
- data/test/bm/ft_26c_load.rb +0 -102
- data/test/bm/ft_recu.rb +0 -71
- data/test/concurrence_test.rb +0 -77
- data/test/console_test.rb +0 -12
- data/test/cron_ltest.rb +0 -15
- data/test/eno_test.rb +0 -76
- data/test/expmap_test.rb +0 -54
- data/test/expool_20031219_0916.tgz +0 -0
- data/test/extras/README.txt +0 -5
- data/test/extras/active_with_engine_test.rb +0 -140
- data/test/extras/activityfeed_test.rb +0 -85
- data/test/extras/ap_0_test.rb +0 -287
- data/test/extras/ap_1_test.rb +0 -53
- data/test/extras/ap_test_base.rb +0 -24
- data/test/extras/atomfeedp_test.rb +0 -113
- data/test/extras/atompubp_test.rb +0 -91
- data/test/extras/basecamp_test.rb +0 -53
- data/test/extras/db_errorjournal_utest.rb +0 -75
- data/test/extras/db_expstorage_utest.rb +0 -171
- data/test/extras/db_history_0_test.rb +0 -58
- data/test/extras/ft_19_csv.rb +0 -58
- data/test/extras/ft_71_b14008.rb +0 -85
- data/test/extras/sqs_test.rb +0 -57
- data/test/extras/twitter_test.rb +0 -62
- data/test/file_persisted_engine_test.rb +0 -64
- data/test/file_persistence_test.rb +0 -135
- data/test/filep_cancel_test.rb +0 -123
- data/test/filter_test.rb +0 -109
- data/test/flowtestbase.rb +0 -339
- data/test/ft_0.rb +0 -68
- data/test/ft_0b_sequence.rb +0 -36
- data/test/ft_0c_testname.rb +0 -33
- data/test/ft_0d_participant.rb +0 -30
- data/test/ft_0e_multibody.rb +0 -34
- data/test/ft_10_loop.rb +0 -133
- data/test/ft_11_ppd.rb +0 -411
- data/test/ft_11b_ppd.rb +0 -54
- data/test/ft_12_blockparticipant.rb +0 -97
- data/test/ft_13_eno.rb +0 -52
- data/test/ft_14_subprocess.rb +0 -88
- data/test/ft_14b_subprocess.rb +0 -192
- data/test/ft_14c_subprocess.rb +0 -68
- data/test/ft_15_iterator.rb +0 -216
- data/test/ft_15b_iterator.rb +0 -74
- data/test/ft_16_fqv.rb +0 -73
- data/test/ft_17_condition.rb +0 -84
- data/test/ft_18_pname.rb +0 -56
- data/test/ft_1_unset.rb +0 -175
- data/test/ft_1b_unset.rb +0 -39
- data/test/ft_20_cron.rb +0 -53
- data/test/ft_21_cron.rb +0 -87
- data/test/ft_21b_cron_pause.rb +0 -82
- data/test/ft_22_history.rb +0 -78
- data/test/ft_23_when.rb +0 -77
- data/test/ft_23b_when.rb +0 -70
- data/test/ft_23c_wait.rb +0 -80
- data/test/ft_23d_cww.rb +0 -58
- data/test/ft_24_def.rb +0 -44
- data/test/ft_25_cancel.rb +0 -92
- data/test/ft_27_getflowpos.rb +0 -143
- data/test/ft_28_fileparticipant.rb +0 -63
- data/test/ft_29_httprb.rb +0 -106
- data/test/ft_2_concurrence.rb +0 -137
- data/test/ft_2b_concurrence.rb +0 -188
- data/test/ft_2c_concurrence.rb +0 -64
- data/test/ft_30_socketlistener.rb +0 -203
- data/test/ft_31_flowname.rb +0 -39
- data/test/ft_32_journal.rb +0 -91
- data/test/ft_32c_journal.rb +0 -102
- data/test/ft_32d_journal.rb +0 -81
- data/test/ft_33_description.rb +0 -107
- data/test/ft_34_cancelwfid.rb +0 -80
- data/test/ft_35_localdefs.rb +0 -77
- data/test/ft_36_subprocids.rb +0 -97
- data/test/ft_37_pnames.rb +0 -70
- data/test/ft_38_tag.rb +0 -127
- data/test/ft_38b_tag.rb +0 -161
- data/test/ft_38c_tag.rb +0 -100
- data/test/ft_38d_tag.rb +0 -53
- data/test/ft_39_reserve.rb +0 -63
- data/test/ft_39b_reserve.rb +0 -84
- data/test/ft_3_equals.rb +0 -170
- data/test/ft_3b_lookup_vf.rb +0 -83
- data/test/ft_40_defined.rb +0 -61
- data/test/ft_41_case.rb +0 -110
- data/test/ft_42_environments.rb +0 -75
- data/test/ft_43_pat10.rb +0 -85
- data/test/ft_44_save.rb +0 -70
- data/test/ft_44b_restore.rb +0 -212
- data/test/ft_45_citerator.rb +0 -214
- data/test/ft_45b_citerator.rb +0 -77
- data/test/ft_46_pparams.rb +0 -62
- data/test/ft_47_filter.rb +0 -160
- data/test/ft_48_fe_filter.rb +0 -88
- data/test/ft_49_condition.rb +0 -133
- data/test/ft_4_misc.rb +0 -232
- data/test/ft_50_xml_attribute.rb +0 -152
- data/test/ft_51_stack.rb +0 -55
- data/test/ft_52_obs_participant.rb +0 -123
- data/test/ft_53_null_noop_participant.rb +0 -62
- data/test/ft_54_listen.rb +0 -288
- data/test/ft_54b_listen.rb +0 -66
- data/test/ft_54c_listen.rb +0 -99
- data/test/ft_55_ptimeout.rb +0 -58
- data/test/ft_56_timeout.rb +0 -59
- data/test/ft_57_a.rb +0 -148
- data/test/ft_58_ejournal.rb +0 -154
- data/test/ft_58b_ejournal.rb +0 -82
- data/test/ft_59_ps.rb +0 -212
- data/test/ft_5_time.rb +0 -118
- data/test/ft_60_ecancel.rb +0 -161
- data/test/ft_61_elsub.rb +0 -51
- data/test/ft_62_procparticipant.rb +0 -71
- data/test/ft_63_pause.rb +0 -137
- data/test/ft_64_alias.rb +0 -101
- data/test/ft_65_stringlaunch.rb +0 -59
- data/test/ft_66_subforget.rb +0 -70
- data/test/ft_67_schedlaunch.rb +0 -115
- data/test/ft_68_ifparticipant.rb +0 -70
- data/test/ft_69_cancelmissing.rb +0 -53
- data/test/ft_6_lambda.rb +0 -64
- data/test/ft_70_lookupvar.rb +0 -55
- data/test/ft_71_log.rb +0 -60
- data/test/ft_72_lookup_processes.rb +0 -79
- data/test/ft_73_cancel_sub.rb +0 -139
- data/test/ft_74_block_and_workitem_dup.rb +0 -63
- data/test/ft_75_ruby_attributes.rb +0 -89
- data/test/ft_76_merge_isolate.rb +0 -88
- data/test/ft_77_segments.rb +0 -35
- data/test/ft_78_eval.rb +0 -150
- data/test/ft_79_tticket.rb +0 -187
- data/test/ft_79b_tticket.rb +0 -172
- data/test/ft_79c_outcome.rb +0 -56
- data/test/ft_7_lose.rb +0 -104
- data/test/ft_7b_lose.rb +0 -78
- data/test/ft_80_spname.rb +0 -91
- data/test/ft_81_exp.rb +0 -60
- data/test/ft_82_trecu.rb +0 -52
- data/test/ft_83_badpause.rb +0 -58
- data/test/ft_84_updateexp.rb +0 -198
- data/test/ft_84b_subrepr.rb +0 -72
- data/test/ft_85_dolhash.rb +0 -43
- data/test/ft_86_dollar_fv.rb +0 -68
- data/test/ft_87_define.rb +0 -74
- data/test/ft_88_http.rb +0 -100
- data/test/ft_8_forget.rb +0 -44
- data/test/ft_9_cursor.rb +0 -154
- data/test/ft_9b_cursor.rb +0 -105
- data/test/ft_tests.rb +0 -130
- data/test/hparticipant_test.rb +0 -168
- data/test/lookup_att_test.rb +0 -90
- data/test/lookup_vf_test.rb +0 -94
- data/test/misc_test.rb +0 -94
- data/test/nut_0_irb.rb +0 -20
- data/test/param_test.rb +0 -290
- data/test/participant_test.rb +0 -101
- data/test/pending.rb +0 -23
- data/test/ps_representation.rb +0 -133
- data/test/rake_ltest.rb +0 -38
- data/test/rake_qtest.rb +0 -68
- data/test/raw_prog_test.rb +0 -407
- data/test/restart_cron_test.rb +0 -136
- data/test/restart_paused_test.rb +0 -103
- data/test/restart_sleep_test.rb +0 -140
- data/test/restart_tests.rb +0 -18
- data/test/restart_when_test.rb +0 -112
- data/test/ruby_procdef_test.rb +0 -132
- data/test/sec_test.rb +0 -206
- data/test/timeout_test.rb +0 -105
- data/test/treechecker_test.rb +0 -111
- data/test/util_xml_test.rb +0 -112
- 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
|
+
|