ruote-maestrodev 2.2.1
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/CHANGELOG.txt +290 -0
- data/CREDITS.txt +99 -0
- data/LICENSE.txt +21 -0
- data/README.rdoc +88 -0
- data/Rakefile +108 -0
- data/TODO.txt +488 -0
- data/lib/ruote.rb +7 -0
- data/lib/ruote/context.rb +194 -0
- data/lib/ruote/engine.rb +1062 -0
- data/lib/ruote/engine/process_error.rb +122 -0
- data/lib/ruote/engine/process_status.rb +448 -0
- data/lib/ruote/exp/command.rb +87 -0
- data/lib/ruote/exp/commanded.rb +69 -0
- data/lib/ruote/exp/condition.rb +227 -0
- data/lib/ruote/exp/fe_add_branches.rb +138 -0
- data/lib/ruote/exp/fe_apply.rb +154 -0
- data/lib/ruote/exp/fe_cancel_process.rb +78 -0
- data/lib/ruote/exp/fe_command.rb +156 -0
- data/lib/ruote/exp/fe_concurrence.rb +321 -0
- data/lib/ruote/exp/fe_concurrent_iterator.rb +219 -0
- data/lib/ruote/exp/fe_cron.rb +141 -0
- data/lib/ruote/exp/fe_cursor.rb +324 -0
- data/lib/ruote/exp/fe_define.rb +112 -0
- data/lib/ruote/exp/fe_echo.rb +60 -0
- data/lib/ruote/exp/fe_equals.rb +115 -0
- data/lib/ruote/exp/fe_error.rb +82 -0
- data/lib/ruote/exp/fe_filter.rb +648 -0
- data/lib/ruote/exp/fe_forget.rb +88 -0
- data/lib/ruote/exp/fe_given.rb +154 -0
- data/lib/ruote/exp/fe_if.rb +127 -0
- data/lib/ruote/exp/fe_inc.rb +205 -0
- data/lib/ruote/exp/fe_iterator.rb +234 -0
- data/lib/ruote/exp/fe_let.rb +75 -0
- data/lib/ruote/exp/fe_listen.rb +304 -0
- data/lib/ruote/exp/fe_lose.rb +110 -0
- data/lib/ruote/exp/fe_noop.rb +45 -0
- data/lib/ruote/exp/fe_once.rb +215 -0
- data/lib/ruote/exp/fe_participant.rb +287 -0
- data/lib/ruote/exp/fe_read.rb +69 -0
- data/lib/ruote/exp/fe_redo.rb +82 -0
- data/lib/ruote/exp/fe_ref.rb +152 -0
- data/lib/ruote/exp/fe_registerp.rb +110 -0
- data/lib/ruote/exp/fe_reserve.rb +126 -0
- data/lib/ruote/exp/fe_restore.rb +102 -0
- data/lib/ruote/exp/fe_save.rb +72 -0
- data/lib/ruote/exp/fe_sequence.rb +59 -0
- data/lib/ruote/exp/fe_set.rb +154 -0
- data/lib/ruote/exp/fe_subprocess.rb +211 -0
- data/lib/ruote/exp/fe_that.rb +92 -0
- data/lib/ruote/exp/fe_undo.rb +67 -0
- data/lib/ruote/exp/fe_unregisterp.rb +69 -0
- data/lib/ruote/exp/fe_wait.rb +95 -0
- data/lib/ruote/exp/flowexpression.rb +886 -0
- data/lib/ruote/exp/iterator.rb +81 -0
- data/lib/ruote/exp/merge.rb +118 -0
- data/lib/ruote/exp/ro_attributes.rb +212 -0
- data/lib/ruote/exp/ro_filters.rb +136 -0
- data/lib/ruote/exp/ro_persist.rb +154 -0
- data/lib/ruote/exp/ro_variables.rb +189 -0
- data/lib/ruote/exp/ro_vf.rb +68 -0
- data/lib/ruote/fei.rb +260 -0
- data/lib/ruote/id/mnemo_wfid_generator.rb +43 -0
- data/lib/ruote/id/wfid_generator.rb +81 -0
- data/lib/ruote/log/default_history.rb +122 -0
- data/lib/ruote/log/pretty.rb +176 -0
- data/lib/ruote/log/storage_history.rb +159 -0
- data/lib/ruote/log/test_logger.rb +208 -0
- data/lib/ruote/log/wait_logger.rb +64 -0
- data/lib/ruote/part/block_participant.rb +137 -0
- data/lib/ruote/part/code_participant.rb +81 -0
- data/lib/ruote/part/engine_participant.rb +189 -0
- data/lib/ruote/part/local_participant.rb +138 -0
- data/lib/ruote/part/no_op_participant.rb +60 -0
- data/lib/ruote/part/null_participant.rb +54 -0
- data/lib/ruote/part/rev_participant.rb +169 -0
- data/lib/ruote/part/smtp_participant.rb +116 -0
- data/lib/ruote/part/storage_participant.rb +392 -0
- data/lib/ruote/part/template.rb +84 -0
- data/lib/ruote/participant.rb +7 -0
- data/lib/ruote/reader.rb +278 -0
- data/lib/ruote/reader/json.rb +49 -0
- data/lib/ruote/reader/radial.rb +290 -0
- data/lib/ruote/reader/ruby_dsl.rb +186 -0
- data/lib/ruote/reader/xml.rb +99 -0
- data/lib/ruote/receiver/base.rb +212 -0
- data/lib/ruote/storage/base.rb +364 -0
- data/lib/ruote/storage/composite_storage.rb +121 -0
- data/lib/ruote/storage/fs_storage.rb +139 -0
- data/lib/ruote/storage/hash_storage.rb +211 -0
- data/lib/ruote/svc/dispatch_pool.rb +158 -0
- data/lib/ruote/svc/dollar_sub.rb +298 -0
- data/lib/ruote/svc/error_handler.rb +138 -0
- data/lib/ruote/svc/expression_map.rb +97 -0
- data/lib/ruote/svc/participant_list.rb +397 -0
- data/lib/ruote/svc/tracker.rb +172 -0
- data/lib/ruote/svc/treechecker.rb +141 -0
- data/lib/ruote/tree_dot.rb +85 -0
- data/lib/ruote/util/filter.rb +525 -0
- data/lib/ruote/util/hashdot.rb +79 -0
- data/lib/ruote/util/look.rb +128 -0
- data/lib/ruote/util/lookup.rb +127 -0
- data/lib/ruote/util/misc.rb +167 -0
- data/lib/ruote/util/ometa.rb +71 -0
- data/lib/ruote/util/serializer.rb +103 -0
- data/lib/ruote/util/subprocess.rb +88 -0
- data/lib/ruote/util/time.rb +100 -0
- data/lib/ruote/util/tree.rb +58 -0
- data/lib/ruote/version.rb +29 -0
- data/lib/ruote/worker.rb +386 -0
- data/lib/ruote/workitem.rb +394 -0
- data/phil.txt +14 -0
- data/ruote.gemspec +44 -0
- data/test/bm/ci.rb +55 -0
- data/test/bm/ici.rb +71 -0
- data/test/bm/juuman.rb +54 -0
- data/test/bm/launch_bench.rb +37 -0
- data/test/bm/load_26c.rb +97 -0
- data/test/bm/mega.rb +64 -0
- data/test/bm/seq_thousand.rb +31 -0
- data/test/bm/t.rb +35 -0
- data/test/functional/base.rb +247 -0
- data/test/functional/concurrent_base.rb +98 -0
- data/test/functional/crunner.rb +31 -0
- data/test/functional/ct_0_concurrence.rb +65 -0
- data/test/functional/ct_1_iterator.rb +67 -0
- data/test/functional/ct_2_cancel.rb +81 -0
- data/test/functional/eft_0_process_definition.rb +65 -0
- data/test/functional/eft_10_cancel_process.rb +46 -0
- data/test/functional/eft_11_wait.rb +109 -0
- data/test/functional/eft_12_listen.rb +500 -0
- data/test/functional/eft_13_iterator.rb +342 -0
- data/test/functional/eft_14_cursor.rb +456 -0
- data/test/functional/eft_15_loop.rb +69 -0
- data/test/functional/eft_16_if.rb +183 -0
- data/test/functional/eft_17_equals.rb +55 -0
- data/test/functional/eft_18_concurrent_iterator.rb +410 -0
- data/test/functional/eft_19_reserve.rb +136 -0
- data/test/functional/eft_1_echo.rb +68 -0
- data/test/functional/eft_20_save.rb +116 -0
- data/test/functional/eft_21_restore.rb +61 -0
- data/test/functional/eft_22_noop.rb +28 -0
- data/test/functional/eft_23_apply.rb +168 -0
- data/test/functional/eft_24_add_branches.rb +98 -0
- data/test/functional/eft_25_command.rb +28 -0
- data/test/functional/eft_26_error.rb +77 -0
- data/test/functional/eft_27_inc.rb +280 -0
- data/test/functional/eft_28_once.rb +135 -0
- data/test/functional/eft_29_cron.rb +64 -0
- data/test/functional/eft_2_sequence.rb +58 -0
- data/test/functional/eft_30_ref.rb +155 -0
- data/test/functional/eft_31_registerp.rb +130 -0
- data/test/functional/eft_32_lose.rb +93 -0
- data/test/functional/eft_33_let.rb +31 -0
- data/test/functional/eft_34_given.rb +123 -0
- data/test/functional/eft_35_filter.rb +375 -0
- data/test/functional/eft_36_read.rb +95 -0
- data/test/functional/eft_3_participant.rb +149 -0
- data/test/functional/eft_4_set.rb +296 -0
- data/test/functional/eft_5_subprocess.rb +163 -0
- data/test/functional/eft_6_concurrence.rb +304 -0
- data/test/functional/eft_7_forget.rb +61 -0
- data/test/functional/eft_8_undo.rb +114 -0
- data/test/functional/eft_9_redo.rb +138 -0
- data/test/functional/ft_0_worker.rb +65 -0
- data/test/functional/ft_10_dollar.rb +304 -0
- data/test/functional/ft_11_recursion.rb +109 -0
- data/test/functional/ft_12_launchitem.rb +43 -0
- data/test/functional/ft_13_variables.rb +151 -0
- data/test/functional/ft_14_re_apply.rb +324 -0
- data/test/functional/ft_15_timeout.rb +226 -0
- data/test/functional/ft_16_participant_params.rb +98 -0
- data/test/functional/ft_17_conditional.rb +102 -0
- data/test/functional/ft_18_kill.rb +138 -0
- data/test/functional/ft_19_participant_code.rb +67 -0
- data/test/functional/ft_1_process_status.rb +796 -0
- data/test/functional/ft_20_storage_participant.rb +543 -0
- data/test/functional/ft_21_forget.rb +153 -0
- data/test/functional/ft_22_process_definitions.rb +90 -0
- data/test/functional/ft_23_load_defs.rb +79 -0
- data/test/functional/ft_24_block_participant.rb +235 -0
- data/test/functional/ft_25_receiver.rb +207 -0
- data/test/functional/ft_26_participant_rtimeout.rb +179 -0
- data/test/functional/ft_27_var_indirection.rb +128 -0
- data/test/functional/ft_28_null_noop_participants.rb +51 -0
- data/test/functional/ft_29_part_template.rb +60 -0
- data/test/functional/ft_2_errors.rb +380 -0
- data/test/functional/ft_30_smtp_participant.rb +122 -0
- data/test/functional/ft_31_part_blocking.rb +72 -0
- data/test/functional/ft_33_participant_subprocess_priority.rb +32 -0
- data/test/functional/ft_34_cursor_rewind.rb +101 -0
- data/test/functional/ft_35_add_service.rb +56 -0
- data/test/functional/ft_36_storage_history.rb +150 -0
- data/test/functional/ft_37_default_history.rb +109 -0
- data/test/functional/ft_38_participant_more.rb +193 -0
- data/test/functional/ft_39_wait_for.rb +136 -0
- data/test/functional/ft_3_participant_registration.rb +574 -0
- data/test/functional/ft_40_wait_logger.rb +62 -0
- data/test/functional/ft_41_participants.rb +91 -0
- data/test/functional/ft_42_storage_copy.rb +71 -0
- data/test/functional/ft_43_participant_on_reply.rb +87 -0
- data/test/functional/ft_44_var_participant.rb +35 -0
- data/test/functional/ft_45_participant_accept.rb +64 -0
- data/test/functional/ft_46_launch_single.rb +83 -0
- data/test/functional/ft_47_wfid_generator.rb +54 -0
- data/test/functional/ft_48_lose.rb +112 -0
- data/test/functional/ft_49_engine_on_error.rb +201 -0
- data/test/functional/ft_4_cancel.rb +132 -0
- data/test/functional/ft_50_engine_config.rb +22 -0
- data/test/functional/ft_51_misc.rb +67 -0
- data/test/functional/ft_52_case.rb +134 -0
- data/test/functional/ft_53_engine_on_terminate.rb +95 -0
- data/test/functional/ft_54_patterns.rb +104 -0
- data/test/functional/ft_55_engine_participant.rb +303 -0
- data/test/functional/ft_56_filter_attribute.rb +259 -0
- data/test/functional/ft_57_rev_participant.rb +252 -0
- data/test/functional/ft_58_workitem.rb +69 -0
- data/test/functional/ft_59_pause.rb +343 -0
- data/test/functional/ft_5_on_error.rb +384 -0
- data/test/functional/ft_60_code_participant.rb +45 -0
- data/test/functional/ft_61_trailing_fields.rb +34 -0
- data/test/functional/ft_62_exp_name_and_dollar_substitution.rb +35 -0
- data/test/functional/ft_6_on_cancel.rb +221 -0
- data/test/functional/ft_7_tags.rb +177 -0
- data/test/functional/ft_8_participant_consumption.rb +124 -0
- data/test/functional/ft_9_subprocesses.rb +146 -0
- data/test/functional/restart_base.rb +34 -0
- data/test/functional/rt_0_wait.rb +55 -0
- data/test/functional/rt_1_listen.rb +56 -0
- data/test/functional/rt_2_errors.rb +56 -0
- data/test/functional/rt_3_once.rb +70 -0
- data/test/functional/rt_4_cron.rb +64 -0
- data/test/functional/rt_5_timeout.rb +60 -0
- data/test/functional/rtest.rb +8 -0
- data/test/functional/storage_helper.rb +93 -0
- data/test/functional/test.rb +44 -0
- data/test/functional/vertical.rb +46 -0
- data/test/path_helper.rb +15 -0
- data/test/test.rb +13 -0
- data/test/test_helper.rb +28 -0
- data/test/unit/storage.rb +428 -0
- data/test/unit/storages.rb +37 -0
- data/test/unit/test.rb +28 -0
- data/test/unit/ut_0_ruby_reader.rb +223 -0
- data/test/unit/ut_11_lookup.rb +122 -0
- data/test/unit/ut_13_serializer.rb +65 -0
- data/test/unit/ut_14_is_uri.rb +28 -0
- data/test/unit/ut_15_util.rb +57 -0
- data/test/unit/ut_16_reader.rb +225 -0
- data/test/unit/ut_18_engine.rb +47 -0
- data/test/unit/ut_19_part_template.rb +86 -0
- data/test/unit/ut_1_fei.rb +165 -0
- data/test/unit/ut_20_composite_storage.rb +74 -0
- data/test/unit/ut_21_svc_participant_list.rb +46 -0
- data/test/unit/ut_22_filter.rb +1094 -0
- data/test/unit/ut_23_svc_tracker.rb +48 -0
- data/test/unit/ut_24_radial_reader.rb +332 -0
- data/test/unit/ut_25_merge.rb +113 -0
- data/test/unit/ut_3_wait_logger.rb +39 -0
- data/test/unit/ut_4_expmap.rb +20 -0
- data/test/unit/ut_5_tree.rb +54 -0
- data/test/unit/ut_6_condition.rb +303 -0
- data/test/unit/ut_7_workitem.rb +99 -0
- data/test/unit/ut_8_tree_to_dot.rb +72 -0
- data/test/unit/ut_9_xml_reader.rb +61 -0
- metadata +504 -0
data/Rakefile
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
|
2
|
+
$:.unshift('.') # 1.9.2
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'rubygems/user_interaction' if Gem::RubyGemsVersion == '1.5.0'
|
6
|
+
|
7
|
+
require 'rake'
|
8
|
+
require 'rake/clean'
|
9
|
+
require 'rake/rdoctask'
|
10
|
+
|
11
|
+
|
12
|
+
#
|
13
|
+
# clean
|
14
|
+
|
15
|
+
CLEAN.include('pkg', 'rdoc', 'ruote_work', 'ruote_data')
|
16
|
+
|
17
|
+
|
18
|
+
#
|
19
|
+
# test
|
20
|
+
|
21
|
+
task :test do
|
22
|
+
|
23
|
+
sh 'ruby -I. test/unit/test.rb'
|
24
|
+
sh 'ruby -I. test/functional/test.rb'
|
25
|
+
end
|
26
|
+
|
27
|
+
task :default => [ :test ]
|
28
|
+
|
29
|
+
|
30
|
+
#
|
31
|
+
# gem
|
32
|
+
|
33
|
+
GEMSPEC_FILE = Dir['*.gemspec'].first
|
34
|
+
GEMSPEC = eval(File.read(GEMSPEC_FILE))
|
35
|
+
GEMSPEC.validate
|
36
|
+
|
37
|
+
|
38
|
+
desc %{
|
39
|
+
builds the gem and places it in pkg/
|
40
|
+
}
|
41
|
+
task :build do
|
42
|
+
|
43
|
+
sh "gem build #{GEMSPEC_FILE}"
|
44
|
+
sh "mkdir pkg" rescue nil
|
45
|
+
sh "mv #{GEMSPEC.name}-#{GEMSPEC.version}.gem pkg/"
|
46
|
+
end
|
47
|
+
|
48
|
+
desc %{
|
49
|
+
builds the gem and pushes it to rubygems.org
|
50
|
+
}
|
51
|
+
task :push => :build do
|
52
|
+
|
53
|
+
sh "gem push pkg/#{GEMSPEC.name}-#{GEMSPEC.version}.gem"
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
#
|
58
|
+
# rdoc
|
59
|
+
#
|
60
|
+
# make sure to have rdoc 2.5.x to run that
|
61
|
+
|
62
|
+
Rake::RDocTask.new do |rd|
|
63
|
+
|
64
|
+
rd.main = 'README.rdoc'
|
65
|
+
rd.rdoc_dir = 'rdoc'
|
66
|
+
|
67
|
+
rd.rdoc_files.include(
|
68
|
+
'README.rdoc', 'CHANGELOG.txt', 'CREDITS.txt', 'lib/**/*.rb')
|
69
|
+
|
70
|
+
rd.title = "#{GEMSPEC.name} #{GEMSPEC.version}"
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
#
|
75
|
+
# upload_rdoc
|
76
|
+
|
77
|
+
desc %{
|
78
|
+
upload the rdoc to rubyforge
|
79
|
+
}
|
80
|
+
task :upload_rdoc => [ :clean, :rdoc ] do
|
81
|
+
|
82
|
+
account = 'jmettraux@rubyforge.org'
|
83
|
+
webdir = '/var/www/gforge-projects/ruote'
|
84
|
+
|
85
|
+
sh "rsync -azv -e ssh rdoc #{account}:#{webdir}/"
|
86
|
+
end
|
87
|
+
|
88
|
+
|
89
|
+
desc %{
|
90
|
+
attempt at detecting test methods with the same name
|
91
|
+
}
|
92
|
+
task :doublons do
|
93
|
+
|
94
|
+
lines = `grep -r " def test_" test/ | sort`.split("\n")
|
95
|
+
lines.inject(nil) do |previous, line|
|
96
|
+
puts line if line == previous
|
97
|
+
line
|
98
|
+
end
|
99
|
+
|
100
|
+
lines = `grep -r "TestCase" test/`.split("\n")
|
101
|
+
lines = lines.collect { |line| [ line, line.split(/\.rb:/).last ] }
|
102
|
+
lines = lines.sort_by { |line, klass| klass }
|
103
|
+
lines.inject(nil) do |previous, (line, klass)|
|
104
|
+
puts klass if line == previous
|
105
|
+
line
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
data/TODO.txt
ADDED
@@ -0,0 +1,488 @@
|
|
1
|
+
|
2
|
+
[o] port load26 (requires BlockParticipant)
|
3
|
+
[o] logger service
|
4
|
+
[o] test logger
|
5
|
+
[o] object full_dup
|
6
|
+
[o] engine#remove_service
|
7
|
+
[o] :receive or :receive_back for when workitems come back from participant
|
8
|
+
[o] emit :processes :launch :wfid
|
9
|
+
[o] emit :processes :terminate :wfid only
|
10
|
+
[o] arch doc
|
11
|
+
[o] verbose always on
|
12
|
+
[o] ev : :participants :register/:unregister
|
13
|
+
[o] test logger always on for tests (in-memory only)
|
14
|
+
[o] NullParticipant
|
15
|
+
[o] NoOpParticipant
|
16
|
+
[o] rufus-dollar
|
17
|
+
[o] variables in ProcessStatus (process level only)
|
18
|
+
[o] ProcessStatus#tree
|
19
|
+
[o] subprocess binding
|
20
|
+
[o] subprocess lookup
|
21
|
+
[o] participant lookup
|
22
|
+
[o] event : launch_sub
|
23
|
+
[o] event : :processes, :cancelled ?
|
24
|
+
[o] concurrence : over_if
|
25
|
+
[o] pool cleanup
|
26
|
+
[o] fexp : created_time
|
27
|
+
[o] ps : launched_time
|
28
|
+
[o] ps : #tags
|
29
|
+
[o] wi test (and fix) ${f:xyz}
|
30
|
+
[o] wi#to_h #from_h
|
31
|
+
[o] wi.params
|
32
|
+
[o] self rec for [main] process
|
33
|
+
[o] fexp.modified_time
|
34
|
+
[o] wfid_gen : rufus-mnemo
|
35
|
+
[o] fs_error_journal
|
36
|
+
[o] fs_error_journal : restart test
|
37
|
+
[o] do errors get removed after being replayed ? yes.
|
38
|
+
[o] cache storage
|
39
|
+
[o] fs storage
|
40
|
+
[o] tag (which implies variables)
|
41
|
+
[o] event : upon setting tag !
|
42
|
+
[o] event : upon leaving tag
|
43
|
+
[o] undo
|
44
|
+
[o] redo
|
45
|
+
[o] cancel-process (exp)
|
46
|
+
[o] cancel_process
|
47
|
+
[o] cancel
|
48
|
+
[o] on_error
|
49
|
+
[o] on_cancel
|
50
|
+
[o] iterator
|
51
|
+
[o] iterator : break, cancel, ...
|
52
|
+
[o] cursor
|
53
|
+
[o] cursor : jump to tag
|
54
|
+
[o] loop
|
55
|
+
[o] if
|
56
|
+
[o] equals
|
57
|
+
[o] unset
|
58
|
+
[o] cursor/loop/iterator : break-if rewind-if
|
59
|
+
[o] stop passing full exp in message, except for expression updates
|
60
|
+
[x] engine#reload
|
61
|
+
[o] participants shutdown
|
62
|
+
[o] stalled [participant] expressions restart (apply/reply ?)
|
63
|
+
"re-apply on reload"
|
64
|
+
http://groups.google.com/group/openwferu-users/browse_thread/thread/c2aa4b53d1664d45
|
65
|
+
[x] workitem.__result__ / why, the workitem itself is the result
|
66
|
+
[o] tracker
|
67
|
+
[o] sleep
|
68
|
+
[o] listen
|
69
|
+
[o] listen wfid="x"
|
70
|
+
[o] exploded scheduler
|
71
|
+
[x] wfid --> piid (stick with the funny old name)
|
72
|
+
[o] persisted tracker
|
73
|
+
[o] wfidgen.shutdown (close wfidgen.last)
|
74
|
+
[o] conditional for everybody
|
75
|
+
[o] timeout for everybody
|
76
|
+
[o] __timed_out__ = true ? (wi.fields)
|
77
|
+
[o] engine.processes()
|
78
|
+
[o] kill_process != cancel_process (need a way to not trigger on_cancel)
|
79
|
+
[o] pdef.to_dot (a beginning)
|
80
|
+
[o] @in_cancel, @in_error --> @state (active|cancelling|killing)
|
81
|
+
[o] wait
|
82
|
+
[o] Jason Allen's check about concurrence
|
83
|
+
[x] on_cancel => 'error' NO
|
84
|
+
[o] event on [un]setting variable
|
85
|
+
[o] condition : != ~= >= ....
|
86
|
+
[o] fs_participant
|
87
|
+
[o] participant : do thread (and do_not_thread)
|
88
|
+
[o] add test for error replay in participant
|
89
|
+
[o] forget : participant ? subprocess ? everybody
|
90
|
+
[o] Ruote.VERSION = "2.0.0" for Kenneth
|
91
|
+
[o] on_timeout => 'part|sub' (idea by hassox)
|
92
|
+
[o] on_timeout => 'error' (idea by hassox)
|
93
|
+
[o] exp : concurrent-iterator < concurrence
|
94
|
+
[o] exp : reserve
|
95
|
+
[o] exp : unset
|
96
|
+
[o] exp : save
|
97
|
+
[o] exp : restore (and its set-fields alias)
|
98
|
+
[o] participant : if EM is present use next_ or defer instead of Thread.new
|
99
|
+
[o] XML process definitions
|
100
|
+
[o] remote process definitions
|
101
|
+
[o] json process definitions
|
102
|
+
[o] check nested ${f:a.b.c}
|
103
|
+
[o] test : participant in error timeout (error should cancel timeout)
|
104
|
+
[o] nested set wi.fields['a.b.0'] = x
|
105
|
+
[o] nested save wi.fields['a.b.0'] = x
|
106
|
+
[o] parser.rb : test security check
|
107
|
+
[o] add Ruote::Launchitem
|
108
|
+
[o] participant#cancel pass flavour as well nil|:kill|:timeout
|
109
|
+
[o] BlockParticipant : |workitem, fexp|
|
110
|
+
[o] listeners
|
111
|
+
[o] engine.wait_for
|
112
|
+
[o] func tests : wire assert_no_errors back in
|
113
|
+
[o] timeout set by participant [implementation]
|
114
|
+
[o] test for wfids of errors in subprocesses !
|
115
|
+
[o] Ruote::Exp:: namespace for expressions
|
116
|
+
[o] exp : apply (ex-eval)
|
117
|
+
[o] apply : attributes to variables
|
118
|
+
[o] subprocess : attributes to variables
|
119
|
+
[o] concurrent_iterator :times => X
|
120
|
+
[o] iterator defaults to :to_v => 'i'
|
121
|
+
[o] concurrent_iterator defaults to :to_v => 'i'
|
122
|
+
[o] set "f:x" => "blah"; set "v:y" => [ 1, 2 ] (defaults to f:)
|
123
|
+
[o] subprocess :ref => uri
|
124
|
+
[o] participants : pass the &block under the option :block
|
125
|
+
[o] concurrence : :over_unless
|
126
|
+
[x] engine#register_subprocess (replaced by engine#variables)
|
127
|
+
[x] switch to JSON friendly pers format for flow expressions
|
128
|
+
[o] switch to JSON friendly pers format for workitems
|
129
|
+
[o] rewind :ref => 'tag_of_cursor_exp' (direct) :tag oriented.
|
130
|
+
[o] exp : error
|
131
|
+
[o] wait 0.500 / wait 60
|
132
|
+
[x] exp : reval : not needed, participants are here
|
133
|
+
[o] exp : inc ? if target is array, becomes append (not cons)
|
134
|
+
[o] exp : dec ? if target is array, then pop (not car)
|
135
|
+
[o] _if '${f:x} == ${f:y}'
|
136
|
+
[x] equals : equals "v:v" => "true" NO => evokes assignment
|
137
|
+
[x] if : _if "v:v" => "true" ? NO => evokes assignement
|
138
|
+
[x] deferred apply technique / not OK, with EM and next_tick / pro
|
139
|
+
[o] reserve : perhaps it's better to have an atomic get and set variable...
|
140
|
+
[o] clean up lookup_var/set_var into locate_var/lookup_var/set_var
|
141
|
+
[x] Sun Hao's up-to-date-tree idea ${f:participant_name} ps#resolved_tree
|
142
|
+
[o] error : when an error expression is cancelled, should the err get remove
|
143
|
+
from the process status ? yes.
|
144
|
+
[o] file logger / history service
|
145
|
+
[o] engine.process_history(wfid)
|
146
|
+
[o] add_branch :times/:branches
|
147
|
+
[o] cursor : :break_if / :break_unless
|
148
|
+
[o] exp : when (exploit :var :set event, or frequency)
|
149
|
+
[o] when : restart test
|
150
|
+
[o] when : cron frequency
|
151
|
+
[o] let listeners accept launchitems
|
152
|
+
[o] exp : cron
|
153
|
+
[o] exp : every
|
154
|
+
[o] write rt test for 'timeout'
|
155
|
+
[o] undo exp : alias to 'cancel'
|
156
|
+
[o] Andrew's at for timeouts (Chronic maybe)
|
157
|
+
[x] timeout :at and :after (timeout expression vanished)
|
158
|
+
[x] listen : should it forget its triggered children ? yes
|
159
|
+
[o] limit the number of msgs returned
|
160
|
+
[o] should redo/undo follow the example of command and add_branches ?
|
161
|
+
everything through reply (receive)
|
162
|
+
should re_apply not touch the state of its expression ?
|
163
|
+
[o] test undo when cancelling parent expression
|
164
|
+
[o] issue with :unless => '${f:index} == 2000'
|
165
|
+
[o] implement Engine#reply (Engine simply has to include ReceiverMixin
|
166
|
+
[o] listeners X receivers
|
167
|
+
[o] add_service(name, path, klass, opts={}) opts local to services (really?)
|
168
|
+
[o] add_branches : pass message to concurrent_iterator like a command expression
|
169
|
+
[o] clean up persists present in #apply
|
170
|
+
[o] maybe cancel should have a safely / redo_reply thing
|
171
|
+
[o] implement Storage#clear!(type)
|
172
|
+
[o] ruote/util/time.rb utc_to_s 'YYYY/MM/DD' --> 'YYYY-MM-DD' (regex friendly)
|
173
|
+
[x] store participant bytecode/AST ?
|
174
|
+
[o] ${r:puts(d("f:nada"))}
|
175
|
+
[o] :ruby_eval_allowed vs 'ruby_eval_allowed'
|
176
|
+
[o] check : what if a reply on a concurrence wants to save, whereas the
|
177
|
+
concurrence terminated (got removed) meanwhile ?
|
178
|
+
the reply returns true...
|
179
|
+
[o] implement StorageHistory
|
180
|
+
[x] nuke FsHistory ? keep
|
181
|
+
[o] EngineParticipant
|
182
|
+
[x] expstorage.to_dot
|
183
|
+
[o] process_status.to_dot
|
184
|
+
[o] EngineParticipant : don't wait in case of forget (reply could NEVER come !)
|
185
|
+
[x] align :forget behaviour on EngineParticipant forget... OK as it is
|
186
|
+
[o] engine.re_apply(fei, wi) (thanks Torsten)... :wi => x, :tree => y...
|
187
|
+
[o] ruote-dm 2.1
|
188
|
+
[o] :tree => Ruote.to_tree { participant 'alpha' }
|
189
|
+
[o] implement == eql? hash for workitem
|
190
|
+
[o] StorageParticipant#query(wfid, participant_name, {fields})
|
191
|
+
[x] break fs_history, prepare for dm_history
|
192
|
+
[o] part = engine.register_participant :alpha, StorageParticipant should work...
|
193
|
+
[o] concurrence :merge_type => 'stack'
|
194
|
+
[o] CompositeStorage.new('msgs' => AmqpStorage.new(''), ...)
|
195
|
+
[x] let the storage participant leverage Ruote::FlowExpressionId.from_id(s)
|
196
|
+
[o] Andrew's technique http://groups.google.com/group/openwferu-users/browse_thread/thread/c2aa4b53d1664d45/8523a1a5ee98fd71
|
197
|
+
[o] Avishai : LocalParticipant : repost dispatch message
|
198
|
+
[o] Rdoc Ruote::Engine.register_participant -> passing a block to a participant
|
199
|
+
and perhaps also on
|
200
|
+
http://ruote.rubyforge.org/implementing_participants.html (Avish)
|
201
|
+
[o] wrap workitem in process error ? for on_error consumption (thanks Oleg)
|
202
|
+
doing workitem.fields['__error__'] = [ fei, time, error_message ]
|
203
|
+
[o] HashStorage should emit 'init persist fail' messages as well !
|
204
|
+
[o] Oleg's idea about participant on_reply
|
205
|
+
http://groups.google.com/group/openwferu-users/browse_thread/thread/2e6a95708c10847b
|
206
|
+
on_reply should be done in the receive action, not in Receiver
|
207
|
+
thus, in the ParticipantExpression
|
208
|
+
[x] exp : step (jump to cursor tag ?) : there is already the jump expression
|
209
|
+
[x] auto-participant re-apply
|
210
|
+
[o] receiver should be OK with a storage or a context
|
211
|
+
[x] Avishai : Worker : hook for rejecting the dispatch message
|
212
|
+
[o] receiver / local participant : reply/forward/proceed/... mess : fix
|
213
|
+
[o] storage participant : accept string for fei
|
214
|
+
[o] => Ruote::FlowExpressionId.extract(x)
|
215
|
+
[o] fei : place engine id in fei.to_storage_id (and back)
|
216
|
+
[o] wait_for(:inactive) blocks until worker is inactive
|
217
|
+
[o] storage0.copy_to(storage1) / migrate_to as requested by Matt Nichols
|
218
|
+
[o] check if rufus-lru is still needed
|
219
|
+
[o] storage migration : eats all the memory :(
|
220
|
+
[x] remove dependency on rufus-scheduler
|
221
|
+
[o] engine.storage_participant
|
222
|
+
[o] engine.noisy = true shortcut
|
223
|
+
[o] (ft_27) set "v:mypart" => [ 'MyParticipant', {} ]
|
224
|
+
binding a participant on the fly (just for this process)
|
225
|
+
[o] participant timeout as an instance method
|
226
|
+
[o] engine.process_wfids (lighter than engine.processes)
|
227
|
+
[o] storage.get_many(x, y, :descending => true) ?
|
228
|
+
[o] storage_participant.query : use skip and limit
|
229
|
+
[o] engine.processes use skip and limit
|
230
|
+
[o] engine.errors use skip and limit
|
231
|
+
[o] ParticipantEntry is a bit brittle when editing engine.participant_list
|
232
|
+
[o] use blank slate for process definition
|
233
|
+
[o] lib/ruote/svc for treechecker, error_handler and co (tree_checker)
|
234
|
+
[o] part/template.rb, use Rufus::Json.pretty_encode
|
235
|
+
[o] storage.clear OR storage.purge! OR both (cf discussion with marc_lee) !!
|
236
|
+
[o] Nathan : throw error on ${ruby:...} when ruby_eval_allowed is not set
|
237
|
+
[o] engine.kill and engine.cancel should accept fei, fexp or wfid
|
238
|
+
[o] participant params['tags'] = [ a, b, c ] ? costly (x expressions to read)
|
239
|
+
but passing them in the workitem could be fun
|
240
|
+
field['__tags__'] ?
|
241
|
+
[x] use treetop for more complex "${f:x} AND ${f:y}" ?
|
242
|
+
(systems like Rails require it anyway)
|
243
|
+
NO : using ruby_parser instead
|
244
|
+
[o] TreeChecker : exclude_fvccall :at_exit
|
245
|
+
[o] _if '${f:x} == ${f:y} || ${f:x} == ${f:z}'
|
246
|
+
[x] beanstalk [as a] workqueue ?
|
247
|
+
[o] tree.to_xml (require builder ?)
|
248
|
+
[o] tree.to_ruby
|
249
|
+
[o] __command__ + tag (rewind that cursor there, not the current one)
|
250
|
+
[o] rewind 'x' where x is a tagname (command x)
|
251
|
+
[o] solve the ps#root_expression_for(fei) dilemma
|
252
|
+
[x] condition : "${f:x} [is] empty" / this one is hard
|
253
|
+
[o] when : add test for cancelling when child has been triggered / is running
|
254
|
+
[o] engine.ps(wfid)
|
255
|
+
[x] alias "when" to "whenever" ?
|
256
|
+
[x] alias "when" to "on" / "upon"
|
257
|
+
[o] alias "when" to "once" "once x == y do"
|
258
|
+
[o] condition : "${'x} [is] empty" since ${array} => "[]"
|
259
|
+
[x] simple worker hooks ? (as discussed with @hassox)
|
260
|
+
on_terminate... ? only works in the same process as the worker
|
261
|
+
only for tests...
|
262
|
+
[o] on_error => retry / pass
|
263
|
+
[o] workitem : #as_json and #from_json
|
264
|
+
since ruote depends on rufus-json...
|
265
|
+
[x] engine.on_error = 'participant_name' // 'subprocess_name'
|
266
|
+
done at : http://github.com/jmettraux/ruote/commit/50292d954ff877f1f6615022216f346a7001b483
|
267
|
+
`--> reverting that for now, too dangerous
|
268
|
+
[o] process_count and error_count ? (processes(:count => true))
|
269
|
+
[o] exp : case (is it necessary ?) (guards ?) (hard for ruote-fluo)
|
270
|
+
[o] exp : lose
|
271
|
+
[o] conditional : rprefix ! ${r:x} is perhaps sufficient
|
272
|
+
[o] implement kill_process! (kill_expression! ?)
|
273
|
+
[o] /!\ resurrect CI
|
274
|
+
[o] user3 :rif => "!wi.fields['approvers'].include?('user3')" : 'in' operator
|
275
|
+
"${customer} in [ 1, 2, 3 ]"
|
276
|
+
"${customer} in { 'x' => 1 }"
|
277
|
+
[o] rename 'parser' to 'reader'
|
278
|
+
[o] ft_42 : maybe require storage to output ids already sorted
|
279
|
+
[o] Participant#rtimeout(workitem=nil)
|
280
|
+
[o] alias concurrent-iterator to citerator
|
281
|
+
[o] like we have a default WaitLogger, why not have a default HistoryLogger ?
|
282
|
+
so that context.history always returns something...
|
283
|
+
the default history would be storage based but with LRU turned on
|
284
|
+
for the HashStorage one...
|
285
|
+
like WaitLogger only remembers 147 msgs...
|
286
|
+
[o] StorageHistory : add a method to list all wfids (for by_wfid)
|
287
|
+
[o] DefaultHistory : add a method to list all wfids (for by_wfid)
|
288
|
+
[x] issue with ruote-kit and inpa participants...
|
289
|
+
[x] .nil? .empty? .set? for "${x}.nil?"
|
290
|
+
[o] BlockParticipant : proc.to_source thanks to sourcify
|
291
|
+
[o] register :overwrite { ... } ? (wipes all the participants)
|
292
|
+
[o] pause engine
|
293
|
+
[o] pause process instance
|
294
|
+
[o] filter : blank? equivalent (maybe it already exists)
|
295
|
+
|
296
|
+
[ ] exp : at expression ? comparable to cron
|
297
|
+
[x] exp : exp (restricted form of eval ?) (is it apply ?)
|
298
|
+
[x] exp : filter
|
299
|
+
[x] exp : filter-definition
|
300
|
+
[x] exp : parameter
|
301
|
+
[ ] exp : log : or could it be a participant ?
|
302
|
+
|
303
|
+
[ ] exp : defined (not really necessary)
|
304
|
+
[ ] exp : quote (not really necessary)
|
305
|
+
[ ] exp : field / attribute (not really necessary)
|
306
|
+
[ ] exp : variable (not really necessary)
|
307
|
+
|
308
|
+
[ ] define without name (__result__)
|
309
|
+
|
310
|
+
[ ] participant dispatch thread throttling ?
|
311
|
+
|
312
|
+
[ ] tailcall
|
313
|
+
[ ] subprocesses participants (alias ?)
|
314
|
+
|
315
|
+
[ ] recursion : should cope with modified trees 'main' => :tree ??
|
316
|
+
|
317
|
+
[ ] set :var => 'y' { '2342342' }
|
318
|
+
|
319
|
+
[ ] file/fs_listener [example] ?
|
320
|
+
|
321
|
+
[ ] concurrence / concurrent_iterator : merge plugin ?
|
322
|
+
use participant for that ?
|
323
|
+
|
324
|
+
[ ] restore : implement merge strategies
|
325
|
+
|
326
|
+
[ ] one file, no multi-process, persistence ? LateHashStorage ?
|
327
|
+
|
328
|
+
[ ] apply : ruby or xml (instead of just ast) ?
|
329
|
+
|
330
|
+
[ ] unify ruote/util/json and ruote/util/serializer
|
331
|
+
|
332
|
+
[ ] history.to_tree ?
|
333
|
+
|
334
|
+
[ ] Ruote.process_definition ... Ruote.method_missing or sequence ?
|
335
|
+
|
336
|
+
[ ] concurrence / concurrent_iterator : merge_type => 'discard' / 'ignore'
|
337
|
+
keep track of the first "process sub id" ?
|
338
|
+
|
339
|
+
[ ] @children diff/undiff idea ?
|
340
|
+
|
341
|
+
[ ] :on_timeout => :rewind (break, jump to x)...
|
342
|
+
[ ] :on_error => :rewind (break, jump to x)...
|
343
|
+
|
344
|
+
[o] cursor : 'reset' command ?
|
345
|
+
[ ] cursor : 'restart' alias for 'reset' ?
|
346
|
+
[ ] repeat : have a counter in a variable (:to => x maybe) (subprocessid ?)
|
347
|
+
|
348
|
+
[ ] engine.cancel_forgotten_children(wfid) ?
|
349
|
+
|
350
|
+
[ ] port subprocess on_cancel test from ruote 0.9 http://groups.google.com/group/openwferu-users/t/75f02bdadf7b93eb
|
351
|
+
|
352
|
+
[ ] double-check on_cancel rewrite (ft_1_process_status)
|
353
|
+
|
354
|
+
[ ] verify get_last/get_raw logic, no + 0.0001...
|
355
|
+
[x] spare 1 get_msg by caching msg (but keep 'deleting')
|
356
|
+
[ ] [un]set_var : via message ? should be ok like that... Not much traffic there
|
357
|
+
|
358
|
+
[ ] empty iterator or concurrent-iterator, log ? crash ? empty while...
|
359
|
+
|
360
|
+
[ ] remove abort_on_exception=true
|
361
|
+
|
362
|
+
[ ] shell ? irb ? Shell.new(storage)
|
363
|
+
[ ] focus on fulldup or json.dup (via fulldup ?)
|
364
|
+
|
365
|
+
[ ] should __error__ contain the tree ?
|
366
|
+
[ ] engine.on_cancel = 'participant_name' // 'subprocess_name'
|
367
|
+
bof
|
368
|
+
|
369
|
+
[ ] participant :ref => '${f:nada}', :or => 'xyz'
|
370
|
+
(look at OpenWFE manual, this feature already existed in there)
|
371
|
+
http://www.openwfe.org/manual/ch06s02.html#expression_participant
|
372
|
+
else-ref... list of participants...
|
373
|
+
ref="alpha && bravo", ref="alpha||bravo" (|| parallel :( )
|
374
|
+
|
375
|
+
[ ] LocalParticipant def consume; handle; reply; end
|
376
|
+
|
377
|
+
[ ] find better solution than "get all schedules"
|
378
|
+
|
379
|
+
[ ] worker : minuteman, make it cron triggerable
|
380
|
+
trap SIGUSR1 or USR2
|
381
|
+
maybe it's expensive to fire a [worker] process each minute
|
382
|
+
have to write the $$ (pid) somewhere for cron to pick it up
|
383
|
+
|
384
|
+
[ ] toto :task => 'maw the lawn', :within => '3d'
|
385
|
+
alias to timeout
|
386
|
+
[ ] "business days" plugin
|
387
|
+
[ ] participant 'toto', :while => '${not_good}' (really ?)
|
388
|
+
|
389
|
+
[ ] re_apply_stalled
|
390
|
+
http://groups.google.com/group/openwferu-users/browse_thread/thread/ff29f26d6b5fd135
|
391
|
+
|
392
|
+
[ ] engine.purge (arts style : worker.@msgs = [])
|
393
|
+
|
394
|
+
[ ] http://ruote.rubyforge.org/irclogs/ruote_2010-07-07.txt
|
395
|
+
configuration issue
|
396
|
+
maybe fail with a good error message when registering service...
|
397
|
+
|
398
|
+
[ ] engine.register_from_dir() have a way to re-evaluate the dir
|
399
|
+
[o] OR remove engine.register_from_dir()
|
400
|
+
[o] AND provide a better register &block
|
401
|
+
[o] provide a mean for a participant to reject a workitem (intra plist)
|
402
|
+
on_reply and now filter ?
|
403
|
+
|
404
|
+
[ ] StorageParticipant#by_store[_name]
|
405
|
+
maybe : reform the store_name system !
|
406
|
+
|
407
|
+
[ ] a run of ruby -w
|
408
|
+
|
409
|
+
[x] cursor : previous_command field ? not really necessary with :break_if => x
|
410
|
+
|
411
|
+
[ ] storage_participant.by_participant([ a, b, c, d ], opts)
|
412
|
+
storage_participant.by_participant(a, b, c, d, opts) too
|
413
|
+
leverage things like
|
414
|
+
http://wiki.apache.org/couchdb/HTTP_view_API#Querying_Options
|
415
|
+
2.1.12
|
416
|
+
|
417
|
+
[ ] receiver/base.rb : fexp.lookup_variable --> lookup_variable ?
|
418
|
+
|
419
|
+
[ ] engine/receiver #reply(workitem or fexp or fei) ?
|
420
|
+
[ ] workitem : short constructor, cf http://groups.google.com/group/openwferu-users/browse_thread/thread/c52d207d85e4b93e
|
421
|
+
[ ] engine.force_reply_to_parent(fei) ?
|
422
|
+
but, this is a cancel_expression(fei)
|
423
|
+
|
424
|
+
[ ] concurrence : add_child ?
|
425
|
+
How would that impact concurrent_iterator's add_branches ?
|
426
|
+
[ ] detach / attach segments of processes
|
427
|
+
[x] clone process ? (could be used by {de|at}tach)
|
428
|
+
what about participants ?
|
429
|
+
|
430
|
+
[ ] console for InformatiQ / console or dashboard or tool ?
|
431
|
+
[ ] pooltool.ru : there are already storage copy methods
|
432
|
+
|
433
|
+
[o] doc : enhance doc on conditional (and, empty, null, ...)
|
434
|
+
[o] doc : document engine.on_{error|terminate}
|
435
|
+
[o] doc : document on_error = retry and on_error = pass
|
436
|
+
[ ] doc : add piece of doc about running workers on their own
|
437
|
+
|
438
|
+
[o] listen to errors {in|out}
|
439
|
+
well... there is already on_error...
|
440
|
+
but on_error is for nested stuff...
|
441
|
+
[o] listen to tags {entering|leaving}
|
442
|
+
[x] listen to launch/terminate, listen :process => :x, :upon => 'launching'
|
443
|
+
you can now set :tag on a subprocess' define
|
444
|
+
[ ] listen to [un]set variable (the events are already in there)
|
445
|
+
not really necessary... there is already 'once' (when)
|
446
|
+
[o] listen condition ? :when => '${x} == y', :constraint, :only, ...
|
447
|
+
it's :where and it's not documented :-( but it's tested :-)
|
448
|
+
[o] engine#on_terminate, similar to on_error
|
449
|
+
[o] let engine#on_error use svc/tracker.rb instead of 'notifications'
|
450
|
+
[ ] process supervise other process, listen...
|
451
|
+
launch a process with a designed 'supervisor' ?
|
452
|
+
listen to termination, listen to error, for a given process ?
|
453
|
+
|
454
|
+
[ ] ruote cheatsheet
|
455
|
+
[ ] ruote slides
|
456
|
+
|
457
|
+
[x] ci : ruote-amqp
|
458
|
+
[ ] ci : ruote-mongodb
|
459
|
+
[ ] ci : jruby
|
460
|
+
|
461
|
+
[ ] StorageParticipant#proceed : raise if workitem not found ?
|
462
|
+
[ ] StorageParticipant#proceed : accept fei ?
|
463
|
+
[ ] Engine#reply(wi), should remove from storage...
|
464
|
+
|
465
|
+
[ ] eft_18 weak with jruby-1.5.1 and 1.5.6
|
466
|
+
|
467
|
+
[ ] participant : consume/cancel/accept?/on_reply without params
|
468
|
+
|
469
|
+
[ ] worker identification/registration
|
470
|
+
http://groups.google.com/group/openwferu-users/browse_thread/thread/c51b94fb8bb685da
|
471
|
+
[ ] worker shutdown initiated by engine (same thread)
|
472
|
+
|
473
|
+
[ ] wait_for(:participant) what about 'dispatched' instead of 'dispatch' ?
|
474
|
+
|
475
|
+
[ ] expression :concurrent => true idea (reply immediately, cancellable)
|
476
|
+
|
477
|
+
[ ] @engine.context['trust_block_participants'] = true
|
478
|
+
[ ] @engine.context['trust_code_participants'] = true
|
479
|
+
[ ] @engine.register(x, :trusted => true, &block)
|
480
|
+
[ ] security service ? context['x'] but then, more advanced behaviours
|
481
|
+
|
482
|
+
[o] register :toto, :accept? => lambda { |workitem| ... }
|
483
|
+
[o] register :toto, :do_not_thread => lambda { |workitem| ... }
|
484
|
+
|
485
|
+
[x] investigate 1.9's json
|
486
|
+
[ ] Parslet for conditions ?
|
487
|
+
[ ] enhance radial/Parslet error messages (cf Raphael)
|
488
|
+
|