ruote 2.1.10 → 2.1.11
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 +51 -1
- data/CREDITS.txt +9 -0
- data/README.rdoc +13 -0
- data/Rakefile +50 -21
- data/TODO.txt +42 -4
- data/examples/pong.rb +37 -0
- data/lib/ruote/context.rb +19 -9
- data/lib/ruote/engine/process_error.rb +10 -0
- data/lib/ruote/engine/process_status.rb +140 -41
- data/lib/ruote/engine.rb +394 -27
- data/lib/ruote/exp/command.rb +2 -0
- data/lib/ruote/exp/fe_concurrence.rb +8 -0
- data/lib/ruote/exp/fe_concurrent_iterator.rb +3 -0
- data/lib/ruote/exp/fe_cursor.rb +48 -4
- data/lib/ruote/exp/fe_iterator.rb +40 -0
- data/lib/ruote/exp/fe_listen.rb +3 -3
- data/lib/ruote/exp/fe_participant.rb +30 -12
- data/lib/ruote/exp/fe_ref.rb +126 -0
- data/lib/ruote/exp/fe_subprocess.rb +20 -1
- data/lib/ruote/exp/fe_wait.rb +4 -1
- data/lib/ruote/exp/fe_when.rb +7 -10
- data/lib/ruote/exp/flowexpression.rb +23 -12
- data/lib/ruote/exp/ro_attributes.rb +5 -8
- data/lib/ruote/exp/ro_variables.rb +4 -2
- data/lib/ruote/fei.rb +2 -0
- data/lib/ruote/id/wfid_generator.rb +1 -1
- data/lib/ruote/log/pretty.rb +137 -0
- data/lib/ruote/log/storage_history.rb +1 -1
- data/lib/ruote/log/test_logger.rb +51 -126
- data/lib/ruote/log/wait_logger.rb +8 -13
- data/lib/ruote/parser/ruby_dsl.rb +4 -4
- data/lib/ruote/parser.rb +2 -2
- data/lib/ruote/part/block_participant.rb +1 -1
- data/lib/ruote/part/engine_participant.rb +1 -1
- data/lib/ruote/part/storage_participant.rb +27 -28
- data/lib/ruote/part/template.rb +8 -3
- data/lib/ruote/receiver/base.rb +24 -6
- data/lib/ruote/storage/base.rb +76 -11
- data/lib/ruote/storage/fs_storage.rb +10 -0
- data/lib/ruote/storage/hash_storage.rb +19 -8
- data/lib/ruote/{part → svc}/dispatch_pool.rb +3 -2
- data/lib/ruote/svc/dollar_sub.rb +265 -0
- data/lib/ruote/{error_handler.rb → svc/error_handler.rb} +6 -1
- data/lib/ruote/{exp → svc}/expression_map.rb +31 -37
- data/lib/ruote/{part → svc}/participant_list.rb +165 -25
- data/lib/ruote/{evt → svc}/tracker.rb +0 -0
- data/lib/ruote/{util → svc}/treechecker.rb +0 -0
- data/lib/ruote/util/look.rb +4 -1
- data/lib/ruote/util/ometa.rb +21 -5
- data/lib/ruote/{subprocess.rb → util/subprocess.rb} +0 -0
- data/lib/ruote/version.rb +1 -1
- data/lib/ruote/worker.rb +29 -69
- data/lib/ruote/workitem.rb +28 -1
- data/ruote.gemspec +26 -22
- data/test/functional/base.rb +3 -0
- data/test/functional/concurrent_base.rb +1 -0
- data/test/functional/crunner.sh +1 -1
- data/test/functional/ct_0_concurrence.rb +6 -0
- data/test/functional/ct_1_iterator.rb +3 -0
- data/test/functional/ct_2_cancel.rb +5 -0
- data/test/functional/eft_13_iterator.rb +39 -4
- data/test/functional/eft_14_cursor.rb +39 -0
- data/test/functional/eft_30_ref.rb +140 -0
- data/test/functional/eft_3_participant.rb +25 -23
- data/test/functional/ft_10_dollar.rb +17 -1
- data/test/functional/ft_14_re_apply.rb +76 -0
- data/test/functional/ft_1_process_status.rb +170 -29
- data/test/functional/ft_20_storage_participant.rb +14 -0
- data/test/functional/ft_24_block_participants.rb +1 -1
- data/test/functional/ft_26_participant_timeout.rb +93 -0
- data/test/functional/ft_2_errors.rb +24 -17
- data/test/functional/ft_30_smtp_participant.rb +7 -2
- data/test/functional/ft_38_participant_more.rb +15 -0
- data/test/functional/ft_39_wait_for.rb +34 -1
- data/test/functional/ft_3_participant_registration.rb +270 -2
- data/test/functional/ft_40_wait_logger.rb +61 -0
- data/test/functional/ft_42_storage_copy.rb +4 -0
- data/test/functional/{ft_40_participant_on_reply.rb → ft_43_participant_on_reply.rb} +17 -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 +49 -0
- data/test/functional/ft_5_on_error.rb +39 -1
- data/test/functional/storage_helper.rb +7 -1
- data/test/test_helper.rb +1 -1
- data/test/unit/storage.rb +105 -32
- data/test/unit/ut_0_ruby_parser.rb +31 -1
- data/test/unit/ut_16_parser.rb +20 -0
- data/test/unit/ut_19_part_template.rb +11 -1
- data/test/unit/ut_20_composite_storage.rb +1 -1
- data/test/unit/ut_4_expmap.rb +1 -1
- data/test/unit/ut_6_condition.rb +2 -2
- metadata +112 -74
- data/lib/ruote/exp/raw.rb +0 -44
- data/lib/ruote/util/dollar.rb +0 -193
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruote
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 2
|
7
|
+
- 1
|
8
|
+
- 11
|
9
|
+
version: 2.1.11
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- John Mettraux
|
@@ -11,139 +16,163 @@ autorequire:
|
|
11
16
|
bindir: bin
|
12
17
|
cert_chain: []
|
13
18
|
|
14
|
-
date: 2010-
|
19
|
+
date: 2010-10-01 00:00:00 +09:00
|
15
20
|
default_executable:
|
16
21
|
dependencies:
|
17
22
|
- !ruby/object:Gem::Dependency
|
18
23
|
name: rufus-json
|
19
|
-
|
20
|
-
|
21
|
-
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
prerelease: false
|
25
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
22
26
|
requirements:
|
23
27
|
- - ">="
|
24
28
|
- !ruby/object:Gem::Version
|
25
|
-
|
26
|
-
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
- 2
|
32
|
+
- 5
|
33
|
+
version: 0.2.5
|
34
|
+
type: :runtime
|
35
|
+
version_requirements: *id001
|
27
36
|
- !ruby/object:Gem::Dependency
|
28
37
|
name: rufus-cloche
|
29
|
-
|
30
|
-
|
31
|
-
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
32
40
|
requirements:
|
33
41
|
- - ">="
|
34
42
|
- !ruby/object:Gem::Version
|
35
|
-
|
36
|
-
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
- 1
|
46
|
+
- 20
|
47
|
+
version: 0.1.20
|
48
|
+
type: :runtime
|
49
|
+
version_requirements: *id002
|
37
50
|
- !ruby/object:Gem::Dependency
|
38
51
|
name: rufus-dollar
|
39
|
-
|
40
|
-
|
41
|
-
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
prerelease: false
|
53
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
42
54
|
requirements:
|
43
55
|
- - ">="
|
44
56
|
- !ruby/object:Gem::Version
|
57
|
+
segments:
|
58
|
+
- 0
|
45
59
|
version: "0"
|
46
|
-
version:
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: rufus-lru
|
49
60
|
type: :runtime
|
50
|
-
|
51
|
-
version_requirements: !ruby/object:Gem::Requirement
|
52
|
-
requirements:
|
53
|
-
- - ">="
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version: "0"
|
56
|
-
version:
|
61
|
+
version_requirements: *id003
|
57
62
|
- !ruby/object:Gem::Dependency
|
58
63
|
name: rufus-mnemo
|
59
|
-
|
60
|
-
|
61
|
-
version_requirements: !ruby/object:Gem::Requirement
|
64
|
+
prerelease: false
|
65
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
62
66
|
requirements:
|
63
67
|
- - ">="
|
64
68
|
- !ruby/object:Gem::Version
|
69
|
+
segments:
|
70
|
+
- 1
|
71
|
+
- 1
|
72
|
+
- 0
|
65
73
|
version: 1.1.0
|
66
|
-
|
74
|
+
type: :runtime
|
75
|
+
version_requirements: *id004
|
67
76
|
- !ruby/object:Gem::Dependency
|
68
77
|
name: rufus-scheduler
|
69
|
-
|
70
|
-
|
71
|
-
version_requirements: !ruby/object:Gem::Requirement
|
78
|
+
prerelease: false
|
79
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
72
80
|
requirements:
|
73
81
|
- - ">="
|
74
82
|
- !ruby/object:Gem::Version
|
83
|
+
segments:
|
84
|
+
- 2
|
85
|
+
- 0
|
86
|
+
- 5
|
75
87
|
version: 2.0.5
|
76
|
-
|
88
|
+
type: :runtime
|
89
|
+
version_requirements: *id005
|
77
90
|
- !ruby/object:Gem::Dependency
|
78
91
|
name: rufus-treechecker
|
79
|
-
|
80
|
-
|
81
|
-
version_requirements: !ruby/object:Gem::Requirement
|
92
|
+
prerelease: false
|
93
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
82
94
|
requirements:
|
83
95
|
- - ">="
|
84
96
|
- !ruby/object:Gem::Version
|
97
|
+
segments:
|
98
|
+
- 1
|
99
|
+
- 0
|
100
|
+
- 3
|
85
101
|
version: 1.0.3
|
86
|
-
|
102
|
+
type: :runtime
|
103
|
+
version_requirements: *id006
|
87
104
|
- !ruby/object:Gem::Dependency
|
88
105
|
name: rake
|
89
|
-
|
90
|
-
|
91
|
-
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
prerelease: false
|
107
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
92
108
|
requirements:
|
93
109
|
- - ">="
|
94
110
|
- !ruby/object:Gem::Version
|
111
|
+
segments:
|
112
|
+
- 0
|
95
113
|
version: "0"
|
96
|
-
|
114
|
+
type: :development
|
115
|
+
version_requirements: *id007
|
97
116
|
- !ruby/object:Gem::Dependency
|
98
117
|
name: yard
|
99
|
-
|
100
|
-
|
101
|
-
version_requirements: !ruby/object:Gem::Requirement
|
118
|
+
prerelease: false
|
119
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
102
120
|
requirements:
|
103
121
|
- - ">="
|
104
122
|
- !ruby/object:Gem::Version
|
123
|
+
segments:
|
124
|
+
- 0
|
105
125
|
version: "0"
|
106
|
-
|
126
|
+
type: :development
|
127
|
+
version_requirements: *id008
|
107
128
|
- !ruby/object:Gem::Dependency
|
108
129
|
name: json
|
109
|
-
|
110
|
-
|
111
|
-
version_requirements: !ruby/object:Gem::Requirement
|
130
|
+
prerelease: false
|
131
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
112
132
|
requirements:
|
113
133
|
- - ">="
|
114
134
|
- !ruby/object:Gem::Version
|
135
|
+
segments:
|
136
|
+
- 0
|
115
137
|
version: "0"
|
116
|
-
|
138
|
+
type: :development
|
139
|
+
version_requirements: *id009
|
117
140
|
- !ruby/object:Gem::Dependency
|
118
141
|
name: builder
|
119
|
-
|
120
|
-
|
121
|
-
version_requirements: !ruby/object:Gem::Requirement
|
142
|
+
prerelease: false
|
143
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
122
144
|
requirements:
|
123
145
|
- - ">="
|
124
146
|
- !ruby/object:Gem::Version
|
147
|
+
segments:
|
148
|
+
- 0
|
125
149
|
version: "0"
|
126
|
-
|
150
|
+
type: :development
|
151
|
+
version_requirements: *id010
|
127
152
|
- !ruby/object:Gem::Dependency
|
128
153
|
name: mailtrap
|
129
|
-
|
130
|
-
|
131
|
-
version_requirements: !ruby/object:Gem::Requirement
|
154
|
+
prerelease: false
|
155
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
132
156
|
requirements:
|
133
157
|
- - ">="
|
134
158
|
- !ruby/object:Gem::Version
|
159
|
+
segments:
|
160
|
+
- 0
|
135
161
|
version: "0"
|
136
|
-
|
162
|
+
type: :development
|
163
|
+
version_requirements: *id011
|
137
164
|
- !ruby/object:Gem::Dependency
|
138
165
|
name: jeweler
|
139
|
-
|
140
|
-
|
141
|
-
version_requirements: !ruby/object:Gem::Requirement
|
166
|
+
prerelease: false
|
167
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
142
168
|
requirements:
|
143
169
|
- - ">="
|
144
170
|
- !ruby/object:Gem::Version
|
171
|
+
segments:
|
172
|
+
- 0
|
145
173
|
version: "0"
|
146
|
-
|
174
|
+
type: :development
|
175
|
+
version_requirements: *id012
|
147
176
|
description: "\n\
|
148
177
|
ruote is an open source ruby workflow engine.\n "
|
149
178
|
email: jmettraux@gmail.com
|
@@ -164,6 +193,7 @@ files:
|
|
164
193
|
- TODO.txt
|
165
194
|
- examples/barley.rb
|
166
195
|
- examples/flickr_report.rb
|
196
|
+
- examples/pong.rb
|
167
197
|
- examples/ruote_quickstart.rb
|
168
198
|
- examples/web_first_page.rb
|
169
199
|
- lib/ruote.rb
|
@@ -171,12 +201,9 @@ files:
|
|
171
201
|
- lib/ruote/engine.rb
|
172
202
|
- lib/ruote/engine/process_error.rb
|
173
203
|
- lib/ruote/engine/process_status.rb
|
174
|
-
- lib/ruote/error_handler.rb
|
175
|
-
- lib/ruote/evt/tracker.rb
|
176
204
|
- lib/ruote/exp/command.rb
|
177
205
|
- lib/ruote/exp/commanded.rb
|
178
206
|
- lib/ruote/exp/condition.rb
|
179
|
-
- lib/ruote/exp/expression_map.rb
|
180
207
|
- lib/ruote/exp/fe_add_branches.rb
|
181
208
|
- lib/ruote/exp/fe_apply.rb
|
182
209
|
- lib/ruote/exp/fe_cancel_process.rb
|
@@ -197,6 +224,7 @@ files:
|
|
197
224
|
- lib/ruote/exp/fe_noop.rb
|
198
225
|
- lib/ruote/exp/fe_participant.rb
|
199
226
|
- lib/ruote/exp/fe_redo.rb
|
227
|
+
- lib/ruote/exp/fe_ref.rb
|
200
228
|
- lib/ruote/exp/fe_reserve.rb
|
201
229
|
- lib/ruote/exp/fe_restore.rb
|
202
230
|
- lib/ruote/exp/fe_save.rb
|
@@ -209,13 +237,13 @@ files:
|
|
209
237
|
- lib/ruote/exp/flowexpression.rb
|
210
238
|
- lib/ruote/exp/iterator.rb
|
211
239
|
- lib/ruote/exp/merge.rb
|
212
|
-
- lib/ruote/exp/raw.rb
|
213
240
|
- lib/ruote/exp/ro_attributes.rb
|
214
241
|
- lib/ruote/exp/ro_persist.rb
|
215
242
|
- lib/ruote/exp/ro_variables.rb
|
216
243
|
- lib/ruote/fei.rb
|
217
244
|
- lib/ruote/id/mnemo_wfid_generator.rb
|
218
245
|
- lib/ruote/id/wfid_generator.rb
|
246
|
+
- lib/ruote/log/pretty.rb
|
219
247
|
- lib/ruote/log/storage_history.rb
|
220
248
|
- lib/ruote/log/test_logger.rb
|
221
249
|
- lib/ruote/log/wait_logger.rb
|
@@ -223,13 +251,11 @@ files:
|
|
223
251
|
- lib/ruote/parser/ruby_dsl.rb
|
224
252
|
- lib/ruote/parser/xml.rb
|
225
253
|
- lib/ruote/part/block_participant.rb
|
226
|
-
- lib/ruote/part/dispatch_pool.rb
|
227
254
|
- lib/ruote/part/engine_participant.rb
|
228
255
|
- lib/ruote/part/hash_participant.rb
|
229
256
|
- lib/ruote/part/local_participant.rb
|
230
257
|
- lib/ruote/part/no_op_participant.rb
|
231
258
|
- lib/ruote/part/null_participant.rb
|
232
|
-
- lib/ruote/part/participant_list.rb
|
233
259
|
- lib/ruote/part/smtp_participant.rb
|
234
260
|
- lib/ruote/part/storage_participant.rb
|
235
261
|
- lib/ruote/part/template.rb
|
@@ -239,18 +265,23 @@ files:
|
|
239
265
|
- lib/ruote/storage/composite_storage.rb
|
240
266
|
- lib/ruote/storage/fs_storage.rb
|
241
267
|
- lib/ruote/storage/hash_storage.rb
|
242
|
-
- lib/ruote/
|
268
|
+
- lib/ruote/svc/dispatch_pool.rb
|
269
|
+
- lib/ruote/svc/dollar_sub.rb
|
270
|
+
- lib/ruote/svc/error_handler.rb
|
271
|
+
- lib/ruote/svc/expression_map.rb
|
272
|
+
- lib/ruote/svc/participant_list.rb
|
273
|
+
- lib/ruote/svc/tracker.rb
|
274
|
+
- lib/ruote/svc/treechecker.rb
|
243
275
|
- lib/ruote/tree_dot.rb
|
244
|
-
- lib/ruote/util/dollar.rb
|
245
276
|
- lib/ruote/util/hashdot.rb
|
246
277
|
- lib/ruote/util/look.rb
|
247
278
|
- lib/ruote/util/lookup.rb
|
248
279
|
- lib/ruote/util/misc.rb
|
249
280
|
- lib/ruote/util/ometa.rb
|
250
281
|
- lib/ruote/util/serializer.rb
|
282
|
+
- lib/ruote/util/subprocess.rb
|
251
283
|
- lib/ruote/util/time.rb
|
252
284
|
- lib/ruote/util/tree.rb
|
253
|
-
- lib/ruote/util/treechecker.rb
|
254
285
|
- lib/ruote/version.rb
|
255
286
|
- lib/ruote/worker.rb
|
256
287
|
- lib/ruote/workitem.rb
|
@@ -294,6 +325,7 @@ files:
|
|
294
325
|
- test/functional/eft_28_when.rb
|
295
326
|
- test/functional/eft_29_cron.rb
|
296
327
|
- test/functional/eft_2_sequence.rb
|
328
|
+
- test/functional/eft_30_ref.rb
|
297
329
|
- test/functional/eft_3_participant.rb
|
298
330
|
- test/functional/eft_4_set.rb
|
299
331
|
- test/functional/eft_5_subprocess.rb
|
@@ -334,9 +366,13 @@ files:
|
|
334
366
|
- test/functional/ft_38_participant_more.rb
|
335
367
|
- test/functional/ft_39_wait_for.rb
|
336
368
|
- test/functional/ft_3_participant_registration.rb
|
337
|
-
- test/functional/
|
369
|
+
- test/functional/ft_40_wait_logger.rb
|
338
370
|
- test/functional/ft_41_participants.rb
|
339
371
|
- test/functional/ft_42_storage_copy.rb
|
372
|
+
- test/functional/ft_43_participant_on_reply.rb
|
373
|
+
- test/functional/ft_44_var_participant.rb
|
374
|
+
- test/functional/ft_45_participant_accept.rb
|
375
|
+
- test/functional/ft_46_launch_single.rb
|
340
376
|
- test/functional/ft_4_cancel.rb
|
341
377
|
- test/functional/ft_5_on_error.rb
|
342
378
|
- test/functional/ft_6_on_cancel.rb
|
@@ -392,18 +428,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
392
428
|
requirements:
|
393
429
|
- - ">="
|
394
430
|
- !ruby/object:Gem::Version
|
431
|
+
segments:
|
432
|
+
- 0
|
395
433
|
version: "0"
|
396
|
-
version:
|
397
434
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
398
435
|
requirements:
|
399
436
|
- - ">="
|
400
437
|
- !ruby/object:Gem::Version
|
438
|
+
segments:
|
439
|
+
- 0
|
401
440
|
version: "0"
|
402
|
-
version:
|
403
441
|
requirements: []
|
404
442
|
|
405
443
|
rubyforge_project: ruote
|
406
|
-
rubygems_version: 1.3.
|
444
|
+
rubygems_version: 1.3.6
|
407
445
|
signing_key:
|
408
446
|
specification_version: 3
|
409
447
|
summary: an open source ruby workflow engine
|
data/lib/ruote/exp/raw.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# Copyright (c) 2005-2010, John Mettraux, jmettraux@gmail.com
|
3
|
-
#
|
4
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
5
|
-
# of this software and associated documentation files (the "Software"), to deal
|
6
|
-
# in the Software without restriction, including without limitation the rights
|
7
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
-
# copies of the Software, and to permit persons to whom the Software is
|
9
|
-
# furnished to do so, subject to the following conditions:
|
10
|
-
#
|
11
|
-
# The above copyright notice and this permission notice shall be included in
|
12
|
-
# all copies or substantial portions of the Software.
|
13
|
-
#
|
14
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
20
|
-
# THE SOFTWARE.
|
21
|
-
#
|
22
|
-
# Made in Japan.
|
23
|
-
#++
|
24
|
-
|
25
|
-
|
26
|
-
module Ruote::Exp
|
27
|
-
|
28
|
-
#
|
29
|
-
# Not a 'real' expression. Used to keep track of failure of [pre-]apply.
|
30
|
-
#
|
31
|
-
class RawExpression < FlowExpression
|
32
|
-
|
33
|
-
names '!raw'
|
34
|
-
|
35
|
-
def apply
|
36
|
-
raise "can't apply or reply [to] raw expression"
|
37
|
-
end
|
38
|
-
|
39
|
-
def reply (workitem)
|
40
|
-
raise "can't apply or reply [to] raw expression"
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
data/lib/ruote/util/dollar.rb
DELETED
@@ -1,193 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# Copyright (c) 2005-2010, John Mettraux, jmettraux@gmail.com
|
3
|
-
#
|
4
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
5
|
-
# of this software and associated documentation files (the "Software"), to deal
|
6
|
-
# in the Software without restriction, including without limitation the rights
|
7
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
-
# copies of the Software, and to permit persons to whom the Software is
|
9
|
-
# furnished to do so, subject to the following conditions:
|
10
|
-
#
|
11
|
-
# The above copyright notice and this permission notice shall be included in
|
12
|
-
# all copies or substantial portions of the Software.
|
13
|
-
#
|
14
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
20
|
-
# THE SOFTWARE.
|
21
|
-
#
|
22
|
-
# Made in Japan.
|
23
|
-
#++
|
24
|
-
|
25
|
-
|
26
|
-
require 'rufus/dollar' # gem 'rufus-dollar'
|
27
|
-
require 'ruote/util/lookup'
|
28
|
-
require 'ruote/util/treechecker'
|
29
|
-
|
30
|
-
|
31
|
-
module Ruote
|
32
|
-
|
33
|
-
# Performs 'dollar substitution' on a piece of text with as input
|
34
|
-
# a flow expression and a workitem (fields and variables).
|
35
|
-
#
|
36
|
-
def self.dosub (text, flow_expression, workitem)
|
37
|
-
|
38
|
-
#
|
39
|
-
# patch by Nick Petrella (2008/03/20)
|
40
|
-
#
|
41
|
-
|
42
|
-
if text.is_a?(String)
|
43
|
-
|
44
|
-
Rufus.dsub(text, FlowDict.new(flow_expression, workitem))
|
45
|
-
|
46
|
-
elsif text.is_a?(Array)
|
47
|
-
|
48
|
-
text.collect { |e| dosub(e, flow_expression, workitem) }
|
49
|
-
|
50
|
-
elsif text.is_a?(Hash)
|
51
|
-
|
52
|
-
text.inject({}) do |h, (k, v)|
|
53
|
-
|
54
|
-
h[dosub(k, flow_expression, workitem)] =
|
55
|
-
dosub(v, flow_expression, workitem)
|
56
|
-
h
|
57
|
-
end
|
58
|
-
|
59
|
-
else
|
60
|
-
|
61
|
-
text
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
#
|
66
|
-
# Wrapping a process expression and the current workitem as a
|
67
|
-
# Hash object ready for lookup at substitution time.
|
68
|
-
#
|
69
|
-
class FlowDict
|
70
|
-
|
71
|
-
def initialize (flow_expression, workitem, default_prefix='f')
|
72
|
-
|
73
|
-
@fexp = flow_expression
|
74
|
-
@workitem = workitem
|
75
|
-
@default_prefix = default_prefix
|
76
|
-
end
|
77
|
-
|
78
|
-
def [] (key)
|
79
|
-
|
80
|
-
return @fexp.fei.to_storage_id if key == 'fei'
|
81
|
-
return @fexp.fei.wfid if key == 'wfid'
|
82
|
-
return @fexp.fei.sub_wfid if key == 'sub_wfid'
|
83
|
-
return @fexp.fei.expid if key == 'expid'
|
84
|
-
|
85
|
-
pr, k = extract_prefix(key)
|
86
|
-
|
87
|
-
# stage 0
|
88
|
-
|
89
|
-
v = lookup(pr[0, 1], k)
|
90
|
-
|
91
|
-
return v if v != nil
|
92
|
-
|
93
|
-
# stage 1
|
94
|
-
|
95
|
-
return '' if pr.size < 2
|
96
|
-
|
97
|
-
lookup(pr[1, 1], k)
|
98
|
-
end
|
99
|
-
|
100
|
-
def []= (key, value)
|
101
|
-
|
102
|
-
pr, k = extract_prefix(key)
|
103
|
-
pr = pr[0, 1]
|
104
|
-
|
105
|
-
if pr == 'f'
|
106
|
-
|
107
|
-
@workitem.set_attribute(k, value)
|
108
|
-
|
109
|
-
elsif @fexp
|
110
|
-
|
111
|
-
@fexp.set_variable(k, value)
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
def has_key? (key)
|
116
|
-
|
117
|
-
pr, k = extract_prefix(key)
|
118
|
-
|
119
|
-
return true if pr == 'r'
|
120
|
-
|
121
|
-
(self[key] != nil)
|
122
|
-
end
|
123
|
-
|
124
|
-
protected
|
125
|
-
|
126
|
-
def lookup (pr, key)
|
127
|
-
|
128
|
-
case pr
|
129
|
-
when 'v' then @fexp.lookup_variable(key)
|
130
|
-
when 'f' then Ruote.lookup(@workitem['fields'], key)
|
131
|
-
when 'r' then call_ruby(key)
|
132
|
-
else nil
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
def extract_prefix (key)
|
137
|
-
|
138
|
-
i = key.index(':')
|
139
|
-
|
140
|
-
return [ @default_prefix, key ] if not i
|
141
|
-
|
142
|
-
pr = key[0..i-1] # until ':'
|
143
|
-
pr = pr[0, 2] # the first two chars
|
144
|
-
|
145
|
-
pr = pr[0, 1] unless (pr == 'vf') or (pr == 'fv')
|
146
|
-
|
147
|
-
[ pr, key[i+1..-1] ]
|
148
|
-
end
|
149
|
-
|
150
|
-
# The ${r:1+2} stuff. ("3").
|
151
|
-
#
|
152
|
-
def call_ruby (ruby_code)
|
153
|
-
|
154
|
-
return '' if @fexp.context['ruby_eval_allowed'] != true
|
155
|
-
|
156
|
-
engine_id = @fexp.context.engine_id
|
157
|
-
|
158
|
-
wi = Ruote::Workitem.new(@workitem)
|
159
|
-
workitem = wi
|
160
|
-
|
161
|
-
fe = @fexp
|
162
|
-
fexp = @fexp
|
163
|
-
flow_expression = @fexp
|
164
|
-
fei = @fexp.fei
|
165
|
-
#
|
166
|
-
# some simple notations made available to ${ruby:...}
|
167
|
-
# notations
|
168
|
-
|
169
|
-
@fexp.context.treechecker.check(ruby_code)
|
170
|
-
|
171
|
-
# clear for eval...
|
172
|
-
|
173
|
-
eval(ruby_code, binding()).to_s
|
174
|
-
end
|
175
|
-
|
176
|
-
# This 'd' function can be called from inside ${r:...} notations.
|
177
|
-
#
|
178
|
-
# pdef = Ruote.process_definition do
|
179
|
-
# sequence do
|
180
|
-
# set 'f:toto' => 'person'
|
181
|
-
# echo "${r:d('f:toto')}"
|
182
|
-
# end
|
183
|
-
# end
|
184
|
-
#
|
185
|
-
# will yield "person".
|
186
|
-
#
|
187
|
-
def d (s)
|
188
|
-
|
189
|
-
Rufus.dsub("${#{s}}", self)
|
190
|
-
end
|
191
|
-
end
|
192
|
-
end
|
193
|
-
|