openwferu 0.9.13 → 0.9.14
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/examples/bigflow.rb +19 -0
- data/examples/csv_weather.rb +23 -0
- data/examples/engine_template.rb +7 -0
- data/lib/openwfe/contextual.rb +0 -2
- data/lib/openwfe/engine/engine.rb +137 -34
- data/lib/openwfe/engine/file_persisted_engine.rb +0 -5
- data/lib/openwfe/exceptions.rb +0 -2
- data/lib/openwfe/expool/errorjournal.rb +83 -7
- data/lib/openwfe/expool/expressionpool.rb +279 -60
- data/lib/openwfe/expool/expstorage.rb +7 -6
- data/lib/openwfe/expool/yamlexpstorage.rb +17 -14
- data/lib/openwfe/expressions/condition.rb +10 -7
- data/lib/openwfe/expressions/environment.rb +11 -1
- data/lib/openwfe/expressions/fe_command.rb +14 -1
- data/lib/openwfe/expressions/fe_cron.rb +29 -14
- data/lib/openwfe/expressions/fe_define.rb +26 -1
- data/lib/openwfe/expressions/fe_iterator.rb +2 -0
- data/lib/openwfe/expressions/fe_losfor.rb +20 -15
- data/lib/openwfe/expressions/fe_misc.rb +0 -2
- data/lib/openwfe/expressions/fe_participant.rb +78 -24
- data/lib/openwfe/expressions/fe_reserve.rb +0 -2
- data/lib/openwfe/expressions/fe_sleep.rb +0 -4
- data/lib/openwfe/expressions/fe_subprocess.rb +34 -0
- data/lib/openwfe/expressions/fe_value.rb +46 -4
- data/lib/openwfe/expressions/fe_wait.rb +0 -2
- data/lib/openwfe/expressions/flowexpression.rb +39 -9
- data/lib/openwfe/expressions/raw.rb +73 -48
- data/lib/openwfe/expressions/raw_prog.rb +45 -15
- data/lib/openwfe/expressions/simplerep.rb +54 -7
- data/lib/openwfe/expressions/time.rb +5 -2
- data/lib/openwfe/expressions/timeout.rb +0 -2
- data/lib/openwfe/flowexpressionid.rb +26 -2
- data/lib/openwfe/participants/enoparticipants.rb +6 -1
- data/lib/openwfe/participants/participant.rb +0 -2
- data/lib/openwfe/participants/participantmap.rb +21 -7
- data/lib/openwfe/participants/participants.rb +29 -0
- data/lib/openwfe/rest/exception.rb +0 -2
- data/lib/openwfe/storage/yamlfilestorage.rb +4 -1
- data/lib/openwfe/util/dollar.rb +0 -2
- data/lib/openwfe/util/lru.rb +0 -2
- data/lib/openwfe/util/observable.rb +1 -1
- data/lib/openwfe/util/scheduler.rb +4 -4
- data/lib/openwfe/util/schedulers.rb +0 -2
- data/lib/openwfe/util/workqueue.rb +34 -91
- data/lib/openwfe/utils.rb +35 -28
- data/lib/openwfe/version.rb +1 -1
- data/lib/openwfe/workitem.rb +1 -1
- data/test/clone_test.rb +51 -0
- data/test/concurrence_test.rb +78 -0
- data/test/cron_test_2.rb +50 -0
- data/test/flowtestbase.rb +40 -12
- data/test/ft_21_cron.rb +32 -6
- data/test/ft_26_load.rb +8 -2
- data/test/ft_26c_load.rb +19 -0
- data/test/ft_27_getflowpos.rb +4 -4
- data/test/ft_2_concurrence.rb +14 -9
- data/test/ft_32_journal.rb +1 -1
- data/test/ft_32c_journal.rb +3 -2
- data/test/ft_32d_journal.rb +2 -1
- data/test/ft_34_cancelwfid.rb +7 -3
- data/test/ft_35_localdefs.rb +13 -0
- data/test/ft_38_tag.rb +8 -6
- data/test/ft_49_condition.rb +7 -1
- data/test/ft_55_ptimeout.rb +13 -14
- data/test/ft_57_a.rb +17 -0
- data/test/ft_58_ejournal.rb +3 -3
- data/test/ft_59_ps.rb +6 -6
- data/test/ft_60_ecancel.rb +3 -5
- data/test/ft_61_elsub.rb +2 -4
- data/test/ft_63_pause.rb +122 -0
- data/test/ft_64_alias.rb +102 -0
- data/test/ft_64_clone.rb +69 -0
- data/test/ft_65_stringlaunch.rb +61 -0
- data/test/ft_66_subforget.rb +70 -0
- data/test/ft_67_schedlaunch.rb +102 -0
- data/test/ft_68_ifparticipant.rb +70 -0
- data/test/ft_69_cancelmissing.rb +49 -0
- data/test/ft_6_lambda.rb +23 -3
- data/test/ft_70_lookupvar.rb +55 -0
- data/test/ft_7_lose.rb +1 -1
- data/test/ft_tests.rb +10 -1
- data/test/hparticipant_test.rb +6 -6
- data/test/param_test.rb +1 -1
- data/test/{rake_test.rb → rake_ltest.rb} +9 -2
- data/test/rake_qtest.rb +3 -1
- data/test/raw_prog_test.rb +11 -3
- data/test/restart_sleep_test.rb +44 -6
- data/test/ruby_procdef_test.rb +129 -0
- data/test/rutest_utils.rb +1 -0
- data/test/sec_test.rb +3 -3
- metadata +19 -4
@@ -29,6 +29,7 @@
|
|
29
29
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
30
30
|
# POSSIBILITY OF SUCH DAMAGE.
|
31
31
|
#++
|
32
|
+
#
|
32
33
|
|
33
34
|
#
|
34
35
|
# "made in Japan"
|
@@ -46,6 +47,12 @@ require 'openwfe/util/dollar'
|
|
46
47
|
|
47
48
|
module OpenWFE
|
48
49
|
|
50
|
+
#
|
51
|
+
# When this variable is set to true (at the process root),
|
52
|
+
# it means the process is paused.
|
53
|
+
#
|
54
|
+
VAR_PAUSED = '/__paused__'
|
55
|
+
|
49
56
|
#
|
50
57
|
# FlowExpression
|
51
58
|
#
|
@@ -76,6 +83,8 @@ module OpenWFE
|
|
76
83
|
@application_context = app_context
|
77
84
|
@attributes = attributes
|
78
85
|
|
86
|
+
@children = []
|
87
|
+
|
79
88
|
@apply_time = nil
|
80
89
|
|
81
90
|
#ldebug do
|
@@ -93,6 +102,7 @@ module OpenWFE
|
|
93
102
|
# parent expression
|
94
103
|
#
|
95
104
|
def apply (workitem)
|
105
|
+
|
96
106
|
get_parent().reply(workitem) if @parent_id
|
97
107
|
end
|
98
108
|
|
@@ -101,6 +111,7 @@ module OpenWFE
|
|
101
111
|
# parent expression
|
102
112
|
#
|
103
113
|
def reply (workitem)
|
114
|
+
|
104
115
|
reply_to_parent(workitem)
|
105
116
|
end
|
106
117
|
|
@@ -111,6 +122,7 @@ module OpenWFE
|
|
111
122
|
# should resume without them.
|
112
123
|
#
|
113
124
|
def reply_to_parent (workitem)
|
125
|
+
|
114
126
|
get_expression_pool.reply_to_parent(self, workitem)
|
115
127
|
end
|
116
128
|
|
@@ -186,21 +198,23 @@ module OpenWFE
|
|
186
198
|
# just before the engine environment in the hierarchy).
|
187
199
|
#
|
188
200
|
def get_root_environment
|
201
|
+
|
189
202
|
fetch_environment.get_root_environment
|
190
203
|
end
|
191
204
|
|
192
|
-
|
205
|
+
#--
|
193
206
|
# A shortcut for fetch_environment.get_process_environment
|
194
207
|
#
|
195
208
|
#def get_subprocess_environment
|
196
209
|
# fetch_environment.get_subprocess_environment
|
197
210
|
#end
|
211
|
+
#++
|
198
212
|
|
199
213
|
#
|
200
214
|
# Just fetches the environment for this expression.
|
201
215
|
#
|
202
216
|
def fetch_environment
|
203
|
-
|
217
|
+
|
204
218
|
get_expression_pool.fetch_expression @environment_id
|
205
219
|
end
|
206
220
|
|
@@ -230,7 +244,15 @@ module OpenWFE
|
|
230
244
|
# " env #{vi.to_debug_s}"
|
231
245
|
#end
|
232
246
|
|
233
|
-
|
247
|
+
ei == vi
|
248
|
+
end
|
249
|
+
|
250
|
+
#
|
251
|
+
# Returns true if this expression belongs to a paused flow
|
252
|
+
#
|
253
|
+
def paused?
|
254
|
+
|
255
|
+
lookup_variable(VAR_PAUSED) == true
|
234
256
|
end
|
235
257
|
|
236
258
|
#
|
@@ -278,6 +300,8 @@ module OpenWFE
|
|
278
300
|
env.delete var
|
279
301
|
end
|
280
302
|
|
303
|
+
alias :unset_variable :delete_variable
|
304
|
+
|
281
305
|
#
|
282
306
|
# Looks up the value for an attribute of this expression.
|
283
307
|
#
|
@@ -341,7 +365,8 @@ module OpenWFE
|
|
341
365
|
|
342
366
|
value = lookup_attribute(attname, workitem)
|
343
367
|
return default if not value
|
344
|
-
|
368
|
+
|
369
|
+
(value.downcase == 'true')
|
345
370
|
end
|
346
371
|
|
347
372
|
#
|
@@ -399,7 +424,8 @@ module OpenWFE
|
|
399
424
|
elt = elt.strip
|
400
425
|
result << elt if elt.length > 0
|
401
426
|
end
|
402
|
-
|
427
|
+
|
428
|
+
result
|
403
429
|
end
|
404
430
|
|
405
431
|
#
|
@@ -427,7 +453,7 @@ module OpenWFE
|
|
427
453
|
|
428
454
|
ldebug { "new_environment() is #{env.fei.to_debug_s}" }
|
429
455
|
|
430
|
-
|
456
|
+
env.store_itself()
|
431
457
|
end
|
432
458
|
|
433
459
|
#
|
@@ -437,12 +463,14 @@ module OpenWFE
|
|
437
463
|
# Returns the duplicated environment.
|
438
464
|
#
|
439
465
|
def dup_environment
|
466
|
+
|
440
467
|
env = fetch_environment
|
441
468
|
env = env.dup
|
442
469
|
env.fei = @fei.dup
|
443
470
|
env.fei.expression_name = EN_ENVIRONMENT
|
444
471
|
@environment_id = env.fei
|
445
|
-
|
472
|
+
|
473
|
+
env.store_itself
|
446
474
|
end
|
447
475
|
|
448
476
|
#
|
@@ -476,7 +504,7 @@ module OpenWFE
|
|
476
504
|
#
|
477
505
|
def get_binding
|
478
506
|
|
479
|
-
|
507
|
+
binding()
|
480
508
|
end
|
481
509
|
|
482
510
|
#
|
@@ -528,7 +556,9 @@ module OpenWFE
|
|
528
556
|
#
|
529
557
|
def lookup_value (workitem, prefix='')
|
530
558
|
|
531
|
-
lookup_vf_attribute(workitem, 'value', prefix)
|
559
|
+
v = lookup_vf_attribute(workitem, 'value', prefix)
|
560
|
+
v = lookup_vf_attribute(workitem, 'val', prefix) unless v
|
561
|
+
v
|
532
562
|
end
|
533
563
|
|
534
564
|
#
|
@@ -37,10 +37,9 @@
|
|
37
37
|
# John Mettraux at openwfe.org
|
38
38
|
#
|
39
39
|
|
40
|
-
|
41
|
-
|
42
|
-
require 'openwfe/rudefinitions'
|
40
|
+
require 'openwfe/exceptions'
|
43
41
|
require 'openwfe/expressions/flowexpression'
|
42
|
+
require 'openwfe/rudefinitions'
|
44
43
|
|
45
44
|
|
46
45
|
module OpenWFE
|
@@ -53,8 +52,8 @@ module OpenWFE
|
|
53
52
|
#
|
54
53
|
class RawExpression < FlowExpression
|
55
54
|
|
56
|
-
def initialize
|
57
|
-
|
55
|
+
def initialize (
|
56
|
+
fei, parent_id, env_id, application_context, raw_representation)
|
58
57
|
|
59
58
|
super(fei, parent_id, env_id, application_context, nil)
|
60
59
|
|
@@ -65,12 +64,13 @@ module OpenWFE
|
|
65
64
|
# now done in the launch methods of the expression pool
|
66
65
|
end
|
67
66
|
|
68
|
-
def instantiate_real_expression
|
69
|
-
|
67
|
+
def instantiate_real_expression (
|
68
|
+
workitem, exp_name=nil, exp_class=nil, attributes=nil)
|
70
69
|
|
70
|
+
exp_name = expression_name() unless exp_name
|
71
71
|
exp_class = expression_class() unless exp_class
|
72
72
|
|
73
|
-
raise "unknown expression '#{
|
73
|
+
raise "unknown expression '#{exp_name}'" \
|
74
74
|
unless exp_class
|
75
75
|
|
76
76
|
#ldebug do
|
@@ -97,50 +97,16 @@ module OpenWFE
|
|
97
97
|
expression
|
98
98
|
end
|
99
99
|
|
100
|
+
#
|
101
|
+
# When a raw expression is applied, it gets turned into the
|
102
|
+
# real expression which then gets applied.
|
103
|
+
#
|
100
104
|
def apply (workitem)
|
101
105
|
|
102
|
-
exp_name =
|
103
|
-
|
104
|
-
exp_class = expression_class()
|
105
|
-
attributes = nil
|
106
|
-
|
107
|
-
template = lookup_variable(exp_name)
|
108
|
-
#
|
109
|
-
# is it a subprocess ?
|
110
|
-
|
111
|
-
if ((not template) and (not exp_class))
|
112
|
-
|
113
|
-
template = get_participant_map.lookup_participant(exp_name)
|
114
|
-
|
115
|
-
unless template
|
116
|
-
exp_name = OpenWFE::to_underscore(exp_name)
|
117
|
-
template = get_participant_map.lookup_participant(exp_name)
|
118
|
-
end
|
119
|
-
end
|
120
|
-
#
|
121
|
-
# is it a directly a participant ?
|
122
|
-
|
123
|
-
if template
|
124
|
-
|
125
|
-
if template.kind_of? OpenWFE::FlowExpressionId
|
126
|
-
|
127
|
-
exp_class = OpenWFE::SubProcessRefExpression
|
128
|
-
attributes = extract_attributes()
|
129
|
-
attributes["ref"] = exp_name
|
130
|
-
|
131
|
-
elsif template.kind_of? OpenWFE::Participant
|
132
|
-
|
133
|
-
exp_class = OpenWFE::ParticipantExpression
|
134
|
-
attributes = extract_attributes()
|
135
|
-
attributes["ref"] = exp_name
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
#
|
140
|
-
# the classical case...
|
106
|
+
exp_name, exp_class, attributes = determine_real_expression
|
141
107
|
|
142
108
|
expression = instantiate_real_expression(
|
143
|
-
workitem, exp_class, attributes)
|
109
|
+
workitem, exp_name, exp_class, attributes)
|
144
110
|
|
145
111
|
#expression.apply_time = OpenWFE::now()
|
146
112
|
#
|
@@ -195,6 +161,65 @@ module OpenWFE
|
|
195
161
|
|
196
162
|
protected
|
197
163
|
|
164
|
+
#
|
165
|
+
# looks up a participant in the participant map, considers
|
166
|
+
# "my-participant" and "my_participant" as the same
|
167
|
+
# (by doing two lookups).
|
168
|
+
#
|
169
|
+
def lookup_participant (name)
|
170
|
+
|
171
|
+
p = get_participant_map.lookup_participant(name)
|
172
|
+
|
173
|
+
unless p
|
174
|
+
name = OpenWFE::to_underscore(name)
|
175
|
+
p = get_participant_map.lookup_participant(name)
|
176
|
+
end
|
177
|
+
|
178
|
+
if p
|
179
|
+
name
|
180
|
+
else
|
181
|
+
nil
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
#
|
186
|
+
# Determines if this raw expression points to a classical
|
187
|
+
# expression, a participant or a subprocess, or nothing at all...
|
188
|
+
#
|
189
|
+
def determine_real_expression ()
|
190
|
+
|
191
|
+
exp_name = expression_name()
|
192
|
+
|
193
|
+
exp_class = expression_class()
|
194
|
+
attributes = nil
|
195
|
+
|
196
|
+
var_value = lookup_variable(exp_name)
|
197
|
+
|
198
|
+
var_value = exp_name if (not exp_class and not var_value)
|
199
|
+
|
200
|
+
if var_value
|
201
|
+
attributes = extract_attributes()
|
202
|
+
end
|
203
|
+
|
204
|
+
if var_value.is_a?(String)
|
205
|
+
|
206
|
+
participant_name = lookup_participant(var_value)
|
207
|
+
|
208
|
+
if participant_name
|
209
|
+
exp_name = participant_name
|
210
|
+
exp_class = OpenWFE::ParticipantExpression
|
211
|
+
attributes['ref'] = participant_name
|
212
|
+
end
|
213
|
+
|
214
|
+
elsif var_value.is_a?(OpenWFE::FlowExpressionId)
|
215
|
+
|
216
|
+
exp_class = OpenWFE::SubProcessRefExpression
|
217
|
+
attributes['ref'] = exp_name
|
218
|
+
end
|
219
|
+
|
220
|
+
[ exp_name, exp_class, attributes ]
|
221
|
+
end
|
222
|
+
|
198
223
|
#
|
199
224
|
# Takes care of extracting the process definition descriptions
|
200
225
|
# if any and to set the description variables accordingly.
|
@@ -30,8 +30,6 @@
|
|
30
30
|
# POSSIBILITY OF SUCH DAMAGE.
|
31
31
|
#++
|
32
32
|
#
|
33
|
-
# $Id: definitions.rb 2725 2006-06-02 13:26:32Z jmettraux $
|
34
|
-
#
|
35
33
|
|
36
34
|
#
|
37
35
|
# "made in Japan"
|
@@ -92,9 +90,8 @@ module OpenWFE
|
|
92
90
|
|
93
91
|
def self.method_missing (m, *args, &block)
|
94
92
|
|
95
|
-
|
96
|
-
|
97
|
-
@ccontext = Context.new() unless @ccontext
|
93
|
+
@ccontext = Context.new() \
|
94
|
+
if (not @ccontext) or @ccontext.discarded?
|
98
95
|
|
99
96
|
ProcessDefinition.make_expression(
|
100
97
|
@ccontext,
|
@@ -103,14 +100,6 @@ module OpenWFE
|
|
103
100
|
&block)
|
104
101
|
end
|
105
102
|
|
106
|
-
#
|
107
|
-
# This method has to be overriden in order to define
|
108
|
-
# a process definition.
|
109
|
-
#
|
110
|
-
def make
|
111
|
-
raise "make() implementation is missing, please provide one"
|
112
|
-
end
|
113
|
-
|
114
103
|
def self.make_expression (context, exp_name, params, &block)
|
115
104
|
|
116
105
|
string_child = nil
|
@@ -169,6 +158,8 @@ module OpenWFE
|
|
169
158
|
def ProcessDefinition.do_make (instance=nil)
|
170
159
|
|
171
160
|
context = if @ccontext
|
161
|
+
@ccontext.discard
|
162
|
+
# preventing further additions in case of reevaluation
|
172
163
|
@ccontext
|
173
164
|
elsif instance
|
174
165
|
instance.make
|
@@ -196,9 +187,41 @@ module OpenWFE
|
|
196
187
|
top_expression
|
197
188
|
end
|
198
189
|
|
190
|
+
#
|
191
|
+
# Parses the string to find the class name of the process definition
|
192
|
+
# and returns that class (instance).
|
193
|
+
#
|
194
|
+
def self.extract_class (ruby_proc_def_string)
|
195
|
+
|
196
|
+
ruby_proc_def_string.each_line do |l|
|
197
|
+
|
198
|
+
m = l.match " *class *([a-zA-Z0-9]*) *< .*ProcessDefinition"
|
199
|
+
return eval(m[1]) if m
|
200
|
+
end
|
201
|
+
|
202
|
+
nil
|
203
|
+
end
|
204
|
+
|
205
|
+
#
|
206
|
+
# Turns a String containing a ProcessDefinition ...
|
207
|
+
#
|
208
|
+
def self.eval_ruby_process_definition (code, safety_level=2)
|
209
|
+
|
210
|
+
o = OpenWFE::eval_safely(code, safety_level)
|
211
|
+
|
212
|
+
o = extract_class(code) \
|
213
|
+
if (o == nil) or o.is_a?(SimpleExpRepresentation)
|
214
|
+
|
215
|
+
return o.do_make \
|
216
|
+
if o.is_a?(ProcessDefinition) or o.is_a?(Class)
|
217
|
+
|
218
|
+
o
|
219
|
+
end
|
220
|
+
|
199
221
|
protected
|
200
222
|
|
201
223
|
def ProcessDefinition.pack_args (args)
|
224
|
+
|
202
225
|
return args[0] if args.length == 1
|
203
226
|
a = {}
|
204
227
|
args.each_with_index do |arg, index|
|
@@ -236,8 +259,8 @@ module OpenWFE
|
|
236
259
|
|
237
260
|
class Context
|
238
261
|
|
239
|
-
attr_accessor :parent_expression
|
240
|
-
attr_reader :
|
262
|
+
attr_accessor :parent_expression, :top_expressions
|
263
|
+
attr_reader :previous_parent_expressions
|
241
264
|
|
242
265
|
def initialize
|
243
266
|
@parent_expression = nil
|
@@ -245,6 +268,13 @@ module OpenWFE
|
|
245
268
|
@previous_parent_expressions = []
|
246
269
|
end
|
247
270
|
|
271
|
+
def discard
|
272
|
+
@discarded = true
|
273
|
+
end
|
274
|
+
def discarded?
|
275
|
+
(@discarded == true)
|
276
|
+
end
|
277
|
+
|
248
278
|
#
|
249
279
|
# puts the current parent expression on top of the 'previous
|
250
280
|
# parent expressions' stack, the current parent expression
|
@@ -30,8 +30,6 @@
|
|
30
30
|
# POSSIBILITY OF SUCH DAMAGE.
|
31
31
|
#++
|
32
32
|
#
|
33
|
-
# $Id: definitions.rb 2725 2006-06-02 13:26:32Z jmettraux $
|
34
|
-
#
|
35
33
|
|
36
34
|
#
|
37
35
|
# "made in Japan"
|
@@ -60,6 +58,7 @@ module OpenWFE
|
|
60
58
|
:children
|
61
59
|
|
62
60
|
def initialize (name, attributes)
|
61
|
+
|
63
62
|
super()
|
64
63
|
@name = name
|
65
64
|
@attributes = attributes
|
@@ -77,7 +76,8 @@ module OpenWFE
|
|
77
76
|
# Always return the ProgRawExpression class.
|
78
77
|
#
|
79
78
|
def raw_expression_class
|
80
|
-
|
79
|
+
|
80
|
+
ProgRawExpression
|
81
81
|
end
|
82
82
|
|
83
83
|
#
|
@@ -85,11 +85,13 @@ module OpenWFE
|
|
85
85
|
# in the classical OpenWFE process definition language.
|
86
86
|
#
|
87
87
|
def to_s
|
88
|
+
|
88
89
|
doc = REXML::Document.new()
|
89
90
|
doc << to_xml
|
90
91
|
s = ""
|
91
92
|
doc.write(s, 0)
|
92
|
-
|
93
|
+
|
94
|
+
s
|
93
95
|
end
|
94
96
|
|
95
97
|
#
|
@@ -112,7 +114,7 @@ module OpenWFE
|
|
112
114
|
end
|
113
115
|
end
|
114
116
|
|
115
|
-
|
117
|
+
elt
|
116
118
|
end
|
117
119
|
|
118
120
|
#
|
@@ -154,6 +156,31 @@ module OpenWFE
|
|
154
156
|
rep
|
155
157
|
end
|
156
158
|
|
159
|
+
#
|
160
|
+
# Evals the given code (string) into a SimpleExpRepresentation.
|
161
|
+
#
|
162
|
+
def self.from_code (code)
|
163
|
+
|
164
|
+
ProcessDefinition.eval_ruby_process_definition code
|
165
|
+
end
|
166
|
+
|
167
|
+
#
|
168
|
+
# Evals the given string a return its SimpleExpRepresentation
|
169
|
+
# equivalent, ready for evaluation or rendering (fluo).
|
170
|
+
#
|
171
|
+
def self.from_s (s)
|
172
|
+
|
173
|
+
s = s.strip
|
174
|
+
|
175
|
+
if s[0, 1] == "<"
|
176
|
+
|
177
|
+
from_xml s
|
178
|
+
else
|
179
|
+
|
180
|
+
from_code s
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
157
184
|
#
|
158
185
|
# Returns a string containing the ruby code that generated this
|
159
186
|
# raw representation tree.
|
@@ -176,7 +203,7 @@ module OpenWFE
|
|
176
203
|
if @children.length > 0
|
177
204
|
s << " do\n"
|
178
205
|
@children.each do |child|
|
179
|
-
if child.respond_to?
|
206
|
+
if child.respond_to?(:to_code_s)
|
180
207
|
s << child.to_code_s(indentation + 1)
|
181
208
|
else
|
182
209
|
s << ind
|
@@ -189,7 +216,27 @@ module OpenWFE
|
|
189
216
|
s << "end"
|
190
217
|
end
|
191
218
|
|
192
|
-
|
219
|
+
s
|
220
|
+
end
|
221
|
+
|
222
|
+
#
|
223
|
+
# Turns this simple representation into an array
|
224
|
+
# (something suitable for to_json()).
|
225
|
+
#
|
226
|
+
def to_a
|
227
|
+
|
228
|
+
cs = @children.collect do |child|
|
229
|
+
|
230
|
+
if child.respond_to?(:to_a)
|
231
|
+
|
232
|
+
child.to_a
|
233
|
+
else
|
234
|
+
|
235
|
+
child.to_s
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
[ @name, @attributes, cs ]
|
193
240
|
end
|
194
241
|
end
|
195
242
|
|
@@ -30,8 +30,6 @@
|
|
30
30
|
# POSSIBILITY OF SUCH DAMAGE.
|
31
31
|
#++
|
32
32
|
#
|
33
|
-
# $Id: definitions.rb 2725 2006-06-02 13:26:32Z jmettraux $
|
34
|
-
#
|
35
33
|
|
36
34
|
#
|
37
35
|
# "made in Japan"
|
@@ -76,6 +74,10 @@ module OpenWFE
|
|
76
74
|
end
|
77
75
|
end
|
78
76
|
|
77
|
+
#
|
78
|
+
# If the expression has been scheduled, a call to this method
|
79
|
+
# will make sure it's unscheduled (removed from the scheduler).
|
80
|
+
#
|
79
81
|
def unschedule ()
|
80
82
|
|
81
83
|
ldebug { "unschedule() @scheduler_job_id is #{@scheduler_job_id}" }
|
@@ -145,6 +147,7 @@ module OpenWFE
|
|
145
147
|
end
|
146
148
|
|
147
149
|
def cancel ()
|
150
|
+
|
148
151
|
to_unschedule()
|
149
152
|
super()
|
150
153
|
end
|
@@ -30,8 +30,6 @@
|
|
30
30
|
# POSSIBILITY OF SUCH DAMAGE.
|
31
31
|
#++
|
32
32
|
#
|
33
|
-
# $Id: workitem.rb 3555 2006-11-13 00:47:53Z jmettraux $
|
34
|
-
#
|
35
33
|
|
36
34
|
#
|
37
35
|
# "hecho en Costa Rica"
|
@@ -77,6 +75,10 @@ module OpenWFE
|
|
77
75
|
alias :expid :expression_id
|
78
76
|
alias :expid= :expression_id=
|
79
77
|
|
78
|
+
alias :expname :expression_name
|
79
|
+
alias :wfname :workflow_definition_name
|
80
|
+
alias :wfrevision :workflow_definition_revision
|
81
|
+
|
80
82
|
#
|
81
83
|
# Overrides the classical to_s()
|
82
84
|
#
|
@@ -88,6 +90,7 @@ module OpenWFE
|
|
88
90
|
# Returns a hash version of this FlowExpressionId instance.
|
89
91
|
#
|
90
92
|
def to_h ()
|
93
|
+
|
91
94
|
h = {}
|
92
95
|
FIELDS.each { |f| h[f] = instance_eval("@#{f.to_s}") }
|
93
96
|
h
|
@@ -97,6 +100,7 @@ module OpenWFE
|
|
97
100
|
# Rebuilds a FlowExpressionId from its Hash representation.
|
98
101
|
#
|
99
102
|
def FlowExpressionId.from_h (h)
|
103
|
+
|
100
104
|
fei = FlowExpressionId.new
|
101
105
|
FIELDS.each { |f| fei.instance_variable_set("@#{f}", h[f]) }
|
102
106
|
fei
|
@@ -107,6 +111,7 @@ module OpenWFE
|
|
107
111
|
end
|
108
112
|
|
109
113
|
def == (other)
|
114
|
+
|
110
115
|
return false if not other.kind_of?(FlowExpressionId)
|
111
116
|
|
112
117
|
#return self.to_s == other.to_s
|
@@ -147,7 +152,11 @@ module OpenWFE
|
|
147
152
|
OpenWFE::starts_with other_fei.expression_id, @expression_id
|
148
153
|
end
|
149
154
|
|
155
|
+
#
|
156
|
+
# Returns a deep copy of this FlowExpressionId instance.
|
157
|
+
#
|
150
158
|
def dup
|
159
|
+
|
151
160
|
OpenWFE::fulldup(self)
|
152
161
|
end
|
153
162
|
|
@@ -157,10 +166,25 @@ module OpenWFE
|
|
157
166
|
"(fei #{@workflow_definition_name} #{@workflow_definition_revision} #{@workflow_instance_id} #{@expression_id} #{@expression_name})"
|
158
167
|
end
|
159
168
|
|
169
|
+
#
|
170
|
+
# Returns a very short string representation (fei wfid expid expname).
|
171
|
+
#
|
160
172
|
def to_short_s
|
161
173
|
"(fei #{@workflow_instance_id} #{@expression_id} #{@expression_name})"
|
162
174
|
end
|
163
175
|
|
176
|
+
#
|
177
|
+
# Returns a URI escaped string with just the wfid and the expid, like
|
178
|
+
# '20070917-dupibodasa__0.0.1'
|
179
|
+
#
|
180
|
+
# Useful for unique identifier in URIs.
|
181
|
+
#
|
182
|
+
def to_web_s
|
183
|
+
|
184
|
+
eid = expid.gsub("\.", "_")
|
185
|
+
URI.escape("#{workflow_instance_id}__#{eid}")
|
186
|
+
end
|
187
|
+
|
164
188
|
#
|
165
189
|
# Yet another debugging method. Just returns the sub_instance_id and
|
166
190
|
# the expression_id, in a string.
|
@@ -75,6 +75,9 @@ module OpenWFE
|
|
75
75
|
# <tt>email_target</tt> field to "foo@nowhere.com" prior to feeding it
|
76
76
|
# to the mail participant.
|
77
77
|
#
|
78
|
+
# Likewise, you can also override the :from_address value by setting the
|
79
|
+
# workitems <tt>email_from</tt> field.
|
80
|
+
#
|
78
81
|
# When passing the mail template as a block, you have
|
79
82
|
# four possible arities :
|
80
83
|
# { |workitem| ... }
|
@@ -127,13 +130,15 @@ module OpenWFE
|
|
127
130
|
"(no template given)"
|
128
131
|
end
|
129
132
|
|
133
|
+
from_address = workitem.email_from rescue @from_address
|
134
|
+
|
130
135
|
puts "msg >>>\n#{msg}<<<"
|
131
136
|
|
132
137
|
#
|
133
138
|
# 2. Send message
|
134
139
|
|
135
140
|
Net::SMTP.start(@smtp_server, @smtp_port) do |smtp|
|
136
|
-
smtp.send_message(msg,
|
141
|
+
smtp.send_message(msg, from_address, to_address)
|
137
142
|
end
|
138
143
|
|
139
144
|
#
|