ruote-maestrodev 2.2.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
|