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
data/README.txt
CHANGED
|
@@ -1,26 +1,36 @@
|
|
|
1
|
-
|
|
1
|
+
|
|
2
|
+
= Ruote (OpenWFEru)
|
|
2
3
|
|
|
3
4
|
== Overview
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
Ruote is an open source workflow engine written in Ruby.
|
|
6
7
|
|
|
7
8
|
"Ruote" is the nickname of the engine/system, as "OpenWFEru" is quite hard to spell.
|
|
8
9
|
|
|
9
10
|
The quickstart is at : http://openwferu.rubyforge.org/quickstart.html
|
|
10
11
|
|
|
11
12
|
|
|
13
|
+
== License
|
|
14
|
+
|
|
15
|
+
is the MIT one.
|
|
16
|
+
|
|
17
|
+
|
|
12
18
|
== Links
|
|
13
19
|
|
|
14
20
|
http://openwferu.rubyforge.org
|
|
15
21
|
http://rubyforge.org/projects/openwferu
|
|
16
22
|
|
|
23
|
+
http://jmettraux.wordpress.com (blog)
|
|
24
|
+
|
|
17
25
|
|
|
18
26
|
== feedback
|
|
19
27
|
|
|
20
|
-
|
|
21
|
-
|
|
28
|
+
mailing list : http://groups.google.com/group/openwferu-users
|
|
29
|
+
|
|
30
|
+
issue tracker : http://rubyforge.org/tracker/?atid=10023&group_id=2609&func=browse
|
|
31
|
+
|
|
32
|
+
irc : irc.freenode.net #ruote
|
|
22
33
|
|
|
23
|
-
issue tracker : http://rubyforge.org/tracker/?atid=10023&group_id=2609&func=browse
|
|
24
34
|
|
|
25
|
-
|
|
35
|
+
author : jmettraux@gmail.com
|
|
26
36
|
|
data/examples/engine_template.rb
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
|
|
2
2
|
require 'rubygems'
|
|
3
3
|
#
|
|
4
|
-
# if
|
|
4
|
+
# if ruote was installed via sudo gem install ruote
|
|
5
5
|
|
|
6
6
|
#
|
|
7
|
-
# setting up
|
|
7
|
+
# setting up a ruote engine, step by step
|
|
8
8
|
|
|
9
|
-
require 'openwfe/engine/
|
|
10
|
-
require 'openwfe/engine/file_persisted_engine'
|
|
9
|
+
require 'openwfe/engine/fs_engine'
|
|
11
10
|
require 'openwfe/participants/participants'
|
|
12
11
|
|
|
13
12
|
|
|
@@ -90,17 +89,11 @@ require 'openwfe/participants/participants'
|
|
|
90
89
|
# might be ideal for an embedded workflow engine with short lived
|
|
91
90
|
# process definitions to run
|
|
92
91
|
|
|
93
|
-
|
|
94
|
-
#engine = OpenWFE::
|
|
92
|
+
engine = OpenWFE::FsPersistedEngine.new
|
|
93
|
+
#engine = OpenWFE::FsPersistedEngine.new(application_context)
|
|
95
94
|
#
|
|
96
95
|
# a file persisted engine, slow, used only within unit tests
|
|
97
96
|
# do not use
|
|
98
|
-
|
|
99
|
-
engine = OpenWFE::CachedFilePersistedEngine.new
|
|
100
|
-
#engine = OpenWFE::CachedFilePersistedEngine.new(application_context)
|
|
101
|
-
#
|
|
102
|
-
# a file persisted engine, with an in-memory cache.
|
|
103
|
-
# use that
|
|
104
97
|
#
|
|
105
98
|
# persistence is done by default under ./work/
|
|
106
99
|
|
|
@@ -135,24 +128,6 @@ end
|
|
|
135
128
|
# dumps all the process history in a file name "history.log"
|
|
136
129
|
# in the work directory
|
|
137
130
|
|
|
138
|
-
# -- process journaling
|
|
139
|
-
|
|
140
|
-
#require 'openwfe/expool/journal'
|
|
141
|
-
#engine.init_service("journal", Journal)
|
|
142
|
-
#
|
|
143
|
-
# activates 'journaling',
|
|
144
|
-
#
|
|
145
|
-
# see http://openwferu.rubyforge.org/journal.html
|
|
146
|
-
#
|
|
147
|
-
# Journaling has a cost in terms of performace.
|
|
148
|
-
# Journaling should be used only in case you might want to migrate
|
|
149
|
-
# [segments of] running processes.
|
|
150
|
-
#
|
|
151
|
-
#engine.application_context[:keep_journals] = true
|
|
152
|
-
#
|
|
153
|
-
# if set to true, the journal of terminated processes will be kept
|
|
154
|
-
# (but moved by default to ./work/journal/done/)
|
|
155
|
-
|
|
156
131
|
|
|
157
132
|
#
|
|
158
133
|
# === some LISTENERS
|
|
@@ -163,18 +138,6 @@ end
|
|
|
163
138
|
|
|
164
139
|
#require 'openwfe/listeners/listeners'
|
|
165
140
|
|
|
166
|
-
#sl = OpenWFE::SocketListener.new(
|
|
167
|
-
# "socket_listener", @engine.application_context, 7008)
|
|
168
|
-
#engine.add_workitem_listener(sl)
|
|
169
|
-
#
|
|
170
|
-
# adding a simple SocketListener on port 7008
|
|
171
|
-
|
|
172
|
-
#require 'openwfe/listeners/socketlisteners'
|
|
173
|
-
#
|
|
174
|
-
#engine.add_workitem_listener(OpenWFE::SocketListener)
|
|
175
|
-
#
|
|
176
|
-
# adding a SocketListener on the default port 7007
|
|
177
|
-
|
|
178
141
|
#engine.add_workitem_listener(OpenWFE::FileListener, "500")
|
|
179
142
|
#
|
|
180
143
|
# listening for workitems (coming as within YAML files dropped in the
|
|
@@ -235,7 +198,7 @@ end
|
|
|
235
198
|
# the workitem to it over TCP
|
|
236
199
|
|
|
237
200
|
|
|
238
|
-
engine.
|
|
201
|
+
engine.reload
|
|
239
202
|
#
|
|
240
203
|
# this method has to be called after all the participants have been
|
|
241
204
|
# added, it looks for temporal expressions (sleep, cron, ...) to
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
|
|
2
|
+
require 'rubygems'
|
|
3
|
+
require 'openwfe/engine' # sudo gem install ruote
|
|
4
|
+
require 'atom/feed' # sudo gem install atom-tools
|
|
5
|
+
|
|
6
|
+
#
|
|
7
|
+
# starting a transient engine (no need to make it persistent)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
engine = OpenWFE::Engine.new(:definition_in_launchitem_allowed => true)
|
|
11
|
+
|
|
12
|
+
#
|
|
13
|
+
# a process that fetches the latest pictures from flickr.com and submits
|
|
14
|
+
# them concurrently to three users for review
|
|
15
|
+
|
|
16
|
+
class MyProcess < OpenWFE::ProcessDefinition
|
|
17
|
+
|
|
18
|
+
sequence do
|
|
19
|
+
|
|
20
|
+
get_pictures
|
|
21
|
+
|
|
22
|
+
concurrence :merge_type => 'mix' do
|
|
23
|
+
# pass the picture list to three users concurrently
|
|
24
|
+
# make sure to let their choice appear in the final workitem
|
|
25
|
+
# at the end of the concurrence
|
|
26
|
+
|
|
27
|
+
user_alice
|
|
28
|
+
user_bob
|
|
29
|
+
user_charly
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
show_results
|
|
33
|
+
# display the pictures chosen by the users
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
#
|
|
38
|
+
# fetching the flickr.com pictures via Atom
|
|
39
|
+
|
|
40
|
+
engine.register_participant :get_pictures do |workitem|
|
|
41
|
+
|
|
42
|
+
feed = Atom::Feed.new(
|
|
43
|
+
"http://api.flickr.com/services/feeds/photos_public.gne"+
|
|
44
|
+
"?tags=#{workitem.tags.join(',')}&format=atom")
|
|
45
|
+
feed.update!
|
|
46
|
+
workitem.pictures = feed.entries.inject([]) do |a, entry|
|
|
47
|
+
a << [ entry.title, entry.authors.first.name, entry.links.first.href ]
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
#
|
|
52
|
+
# the users (well, here, just randomly picking a picture)
|
|
53
|
+
|
|
54
|
+
engine.register_participant 'user-.*' do |workitem|
|
|
55
|
+
|
|
56
|
+
workitem.fields[workitem.participant_name] =
|
|
57
|
+
workitem.pictures[(rand * workitem.pictures.length).to_i]
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
#
|
|
61
|
+
# the final participant, it displays the user choices
|
|
62
|
+
|
|
63
|
+
engine.register_participant :show_results do |workitem|
|
|
64
|
+
puts
|
|
65
|
+
puts ' users selected those images : '
|
|
66
|
+
puts
|
|
67
|
+
workitem.attributes.each do |k, v|
|
|
68
|
+
next unless k.match(/^user-.*$/)
|
|
69
|
+
puts "- #{k} :: #{v.last}"
|
|
70
|
+
end
|
|
71
|
+
puts
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
#
|
|
75
|
+
# launching the process, requesting pictures tagged 'cat' and 'fish'
|
|
76
|
+
|
|
77
|
+
li = OpenWFE::LaunchItem.new(MyProcess)
|
|
78
|
+
li.tags = [ 'cat', 'fish' ]
|
|
79
|
+
|
|
80
|
+
fei = engine.launch(li)
|
|
81
|
+
|
|
82
|
+
#
|
|
83
|
+
# workflow engines are asynchronous beasts, have to wait for them
|
|
84
|
+
# (here we wait for a particular process)
|
|
85
|
+
|
|
86
|
+
engine.wait_for(fei)
|
|
87
|
+
|
data/examples/quotereporter.rb
CHANGED
|
@@ -6,9 +6,8 @@
|
|
|
6
6
|
require 'rubygems'
|
|
7
7
|
|
|
8
8
|
require 'openwfe/engine/engine'
|
|
9
|
-
require 'openwfe/expressions/raw_prog'
|
|
10
9
|
require 'openwfe/participants/soapparticipants'
|
|
11
|
-
require 'openwfe/participants/
|
|
10
|
+
require 'openwfe/extras/participants/atomfeed_participants'
|
|
12
11
|
|
|
13
12
|
|
|
14
13
|
#
|
|
@@ -18,50 +17,42 @@ require 'openwfe/participants/atomparticipants'
|
|
|
18
17
|
# define the flow as a Ruby class
|
|
19
18
|
|
|
20
19
|
class QuoteLookupFlow < OpenWFE::ProcessDefinition
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
#participant "puts_workitem"
|
|
58
|
-
#participant :puts_workitem
|
|
59
|
-
puts_workitem
|
|
60
|
-
#
|
|
61
|
-
# the five notations are equivalent
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|
|
20
|
+
sequence do
|
|
21
|
+
|
|
22
|
+
#
|
|
23
|
+
# lookup quotes
|
|
24
|
+
|
|
25
|
+
iterator :on_field_value => "symbols", :to_field => "symbol" do
|
|
26
|
+
sequence do
|
|
27
|
+
|
|
28
|
+
set :field => "quote_${f:__ip__}_name", :field_value => "symbol"
|
|
29
|
+
|
|
30
|
+
participant :quote_service
|
|
31
|
+
|
|
32
|
+
set :field => "quote_${f:__ip__}_value", :field_value => "__result__"
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
#
|
|
37
|
+
# update feed
|
|
38
|
+
|
|
39
|
+
set :field => "atom_entry_title" do
|
|
40
|
+
"quote feed at ${r:Time.now}"
|
|
41
|
+
end
|
|
42
|
+
#
|
|
43
|
+
# wrapping some ruby code for eval at runtime
|
|
44
|
+
# with ${r: ruby code ... }
|
|
45
|
+
|
|
46
|
+
participant :feed
|
|
47
|
+
|
|
48
|
+
#participant :ref => "puts_workitem"
|
|
49
|
+
#participant :ref => :puts_workitem
|
|
50
|
+
#participant "puts_workitem"
|
|
51
|
+
#participant :puts_workitem
|
|
52
|
+
puts_workitem
|
|
53
|
+
#
|
|
54
|
+
# the five notations are equivalent
|
|
55
|
+
end
|
|
65
56
|
end
|
|
66
57
|
|
|
67
58
|
#
|
|
@@ -69,7 +60,7 @@ end
|
|
|
69
60
|
#
|
|
70
61
|
# a simple in memory engine, no persistence whatsoever for now.
|
|
71
62
|
|
|
72
|
-
engine = OpenWFE::Engine.new
|
|
63
|
+
engine = OpenWFE::Engine.new({ :definition_in_launchitem_allowed => true })
|
|
73
64
|
|
|
74
65
|
#
|
|
75
66
|
# The Participants
|
|
@@ -95,7 +86,7 @@ engine.register_participant("quote_service", quote_service)
|
|
|
95
86
|
#
|
|
96
87
|
# The feed is outputted in the current working directory ./atom_feed.xml
|
|
97
88
|
#
|
|
98
|
-
feed = OpenWFE::
|
|
89
|
+
feed = OpenWFE::Extras::AtomFeedParticipant.new(10) do
|
|
99
90
|
| flow_expression, participant, workitem |
|
|
100
91
|
|
|
101
92
|
#
|
|
@@ -134,7 +125,7 @@ end
|
|
|
134
125
|
#
|
|
135
126
|
# launching (not lunching)
|
|
136
127
|
|
|
137
|
-
launchitem = LaunchItem.new(QuoteLookupFlow)
|
|
128
|
+
launchitem = OpenWFE::LaunchItem.new(QuoteLookupFlow)
|
|
138
129
|
#
|
|
139
130
|
# Passing the process definition class as the unique
|
|
140
131
|
# LaunchItem parameter
|
|
@@ -155,3 +146,5 @@ engine.launch(launchitem)
|
|
|
155
146
|
# sleep (3600) # one hour
|
|
156
147
|
# end
|
|
157
148
|
|
|
149
|
+
engine.join
|
|
150
|
+
|
data/examples/simple.rb
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
|
|
2
|
+
require 'rubygems'
|
|
3
|
+
require 'openwfe/engine' # sudo gem install ruote
|
|
4
|
+
|
|
5
|
+
#
|
|
6
|
+
# define a process, just a sequence, from Alice to Bob
|
|
7
|
+
|
|
8
|
+
#process_definition = OpenWFE.process_definition :name => 'test' do
|
|
9
|
+
class Pdef < OpenWFE::ProcessDefinition
|
|
10
|
+
sequence do
|
|
11
|
+
participant 'alice'
|
|
12
|
+
participant 'bob'
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
#
|
|
17
|
+
# instantiate a ruote engine, the default (transient) one is OK.
|
|
18
|
+
# allow it to fetch process definitions from lauchitems.
|
|
19
|
+
#
|
|
20
|
+
# more info about engines and persistence flavour at
|
|
21
|
+
#
|
|
22
|
+
# http://openwferu.rubyforge.org/persistence.html
|
|
23
|
+
|
|
24
|
+
engine = OpenWFE::Engine.new(:definition_in_launchitem_allowed => true)
|
|
25
|
+
|
|
26
|
+
#
|
|
27
|
+
# register two very basic participants 'alice' and 'bob',
|
|
28
|
+
# use a BlockParticipant (simply wrapping some ruby code inside of a
|
|
29
|
+
# participant).
|
|
30
|
+
#
|
|
31
|
+
# more info about participants at
|
|
32
|
+
#
|
|
33
|
+
# http://openwferu.rubyforge.org/participants.html
|
|
34
|
+
|
|
35
|
+
engine.register_participant 'alice' do |workitem|
|
|
36
|
+
puts '~alice~'
|
|
37
|
+
workitem.fields['message'] = 'hello from Alice !'
|
|
38
|
+
end
|
|
39
|
+
engine.register_participant 'bob' do |workitem|
|
|
40
|
+
puts '~bob~'
|
|
41
|
+
puts "the message says '#{workitem.fields['message']}'"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
#
|
|
45
|
+
# launch the process (let the engine interpret the process definition and
|
|
46
|
+
# create a process instance)
|
|
47
|
+
|
|
48
|
+
#fei = engine.launch(process_definition)
|
|
49
|
+
fei = engine.launch(Pdef)
|
|
50
|
+
|
|
51
|
+
#
|
|
52
|
+
# wait for the process instance to terminate before exiting this tiny ruby
|
|
53
|
+
# program
|
|
54
|
+
|
|
55
|
+
engine.wait_for(fei)
|
|
56
|
+
|
data/lib/openwfe.rb
CHANGED
|
@@ -1,41 +1,27 @@
|
|
|
1
|
-
#
|
|
2
1
|
#--
|
|
3
2
|
# Copyright (c) 2005-2007, John Mettraux and Alain Hoang, OpenWFE.org
|
|
4
|
-
# All rights reserved.
|
|
5
|
-
#
|
|
6
|
-
# Redistribution and use in source and binary forms, with or without
|
|
7
|
-
# modification, are permitted provided that the following conditions are met:
|
|
8
|
-
#
|
|
9
|
-
# . Redistributions of source code must retain the above copyright notice, this
|
|
10
|
-
# list of conditions and the following disclaimer.
|
|
11
|
-
#
|
|
12
|
-
# . Redistributions in binary form must reproduce the above copyright notice,
|
|
13
|
-
# this list of conditions and the following disclaimer in the documentation
|
|
14
|
-
# and/or other materials provided with the distribution.
|
|
15
3
|
#
|
|
16
|
-
#
|
|
17
|
-
#
|
|
18
|
-
#
|
|
19
|
-
#
|
|
20
|
-
#
|
|
21
|
-
#
|
|
22
|
-
#
|
|
23
|
-
#
|
|
24
|
-
#
|
|
25
|
-
#
|
|
26
|
-
#
|
|
27
|
-
#
|
|
28
|
-
#
|
|
29
|
-
#
|
|
30
|
-
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
|
+
# of this software and associated documentation files (the "Software"), to deal
|
|
6
|
+
# in the Software without restriction, including without limitation the rights
|
|
7
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
+
# copies of the Software, and to permit persons to whom the Software is
|
|
9
|
+
# furnished to do so, subject to the following conditions:
|
|
10
|
+
#
|
|
11
|
+
# The above copyright notice and this permission notice shall be included in
|
|
12
|
+
# all copies or substantial portions of the Software.
|
|
13
|
+
#
|
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
16
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
17
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
19
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
20
|
+
# THE SOFTWARE.
|
|
21
|
+
#
|
|
22
|
+
# Made in Japan.
|
|
31
23
|
#++
|
|
32
|
-
#
|
|
33
|
-
# = openwferu -- Open Workflow Engine in Ruby
|
|
34
|
-
#
|
|
35
|
-
# This is the main file for the openwferu engine. It is normally
|
|
36
|
-
# referenced as a library via a require statement.
|
|
37
|
-
#
|
|
38
24
|
|
|
39
25
|
require 'openwfe/engine/engine'
|
|
40
|
-
|
|
26
|
+
require 'openwfe/engine/fs_engine'
|
|
41
27
|
|