openwferu 0.9.13 → 0.9.14
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
#
|