weel 1.99.118 → 1.99.121

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b5bc42f10a93d8960c022e4b48fe7eaeee25912bb7b9245b2ed4fd20159ed89f
4
- data.tar.gz: c55e8d55c288a759a10eee35dfb84d93e414c9e534c8a9c1df47b5ad03a58d3f
3
+ metadata.gz: e3dc94f3d9dc7b182dc017f529211878cdbffa2504d1f863220d0820b786e28b
4
+ data.tar.gz: 816645f85946983a86ba373e4e5e660b2688fc32c57e0f72e44a4d71a774b9b0
5
5
  SHA512:
6
- metadata.gz: 4a67a6c207b00bb5e124391f41b83d6ad98d4c8de3e986c9376e1d78772e9ef157e4c642c5739b0b49daa29c108ebd903e3914a06344e12893bbad55ffedcc82
7
- data.tar.gz: ef5ed955f4ce61abe1a4be7924a2faf66a9c296bb11e7cb1fcc3e5b8fce05b0246950bd8fea7f21f4c57c3ccb775928184b74c86b6cde9a4afe4d45cdc034926
6
+ metadata.gz: a22047ce8e533de6326a7cccbdb25a7dfabc5b137880b111ff2032cdb1d32bd45f0f3fccb421e72f4d823a8d84a6fd3ec67d81ee3e1bef0b61c755621e28bee2
7
+ data.tar.gz: 5ebc7c1d4a819a23ee2399be8818f80b7de71fb6753351750d3dbabe2ad122f6be6fe783f30d3d5acd00e1ff927c57f90b0c5052b8195d889420b217625cf37d
data/lib/weel.rb CHANGED
@@ -86,6 +86,17 @@ class WEEL
86
86
  end
87
87
  end
88
88
  end
89
+ def update(d,e,s)
90
+ d.each do |k,v|
91
+ data.send(k+'=',v)
92
+ end if d
93
+ e.each do |k,v|
94
+ endpoints.send(k+'=',v)
95
+ end if e
96
+ if s
97
+ status.update(s['id'],s['message'])
98
+ end
99
+ end
89
100
  def data
90
101
  ReadHash.new(@__weel_data)
91
102
  end
@@ -139,6 +150,18 @@ class WEEL
139
150
  end
140
151
  end
141
152
 
153
+ def update(d,e,s)
154
+ d.each do |k,v|
155
+ data.send(k+'=',v)
156
+ end if d
157
+ e.each do |k,v|
158
+ endpoints.send(k+'=',v)
159
+ end if e
160
+ if s
161
+ status.update(s['id'],s['message'])
162
+ end
163
+ end
164
+
142
165
  def changed_data
143
166
  @touched_data.each do |e|
144
167
  td = Marshal.dump(@__weel_data[e]) rescue nil
@@ -146,10 +169,10 @@ class WEEL
146
169
  @changed_data << e
147
170
  end
148
171
  end
149
- @changed_data
172
+ @changed_data.uniq
150
173
  end
151
174
  def changed_endpoints
152
- @changed_endpoints
175
+ @changed_endpoints.uniq
153
176
  end
154
177
 
155
178
  def original_data
@@ -236,6 +259,12 @@ class WEEL
236
259
  def wait_until_nudged!
237
260
  @nudge.pop
238
261
  end
262
+ def to_json(*a)
263
+ {
264
+ 'id' => @id,
265
+ 'message' => @message
266
+ }.to_json(*a)
267
+ end
239
268
  attr_reader :id, :message
240
269
  end #}}}
241
270
 
@@ -354,9 +383,19 @@ class WEEL
354
383
  def callback(result=nil,options={}); end
355
384
  def mem_guard; end
356
385
 
357
- def test_condition(mr,code,args={}); mr.instance_eval(code); end
386
+ def test_condition(dataelements,endpoints,local,additional,code,args={}); ReadStructure.new(dataelements,endpoints,local,additional).instance_eval(code); end
387
+ def eval_expression(dataelements,endpoints,local,additional,code); ReadStructure.new(dataelements,endpoints,local,additional).instance_eval(code); end
388
+ def manipulate(readonly,lock,dataelements,endpoints,status,local,additional,code,where,result=nil,options=nil)
389
+ lock.synchronize do
390
+ if readonly
391
+ ReadStructure.new(dataelements,endpoints,local,additional).instance_eval(code,where,1)
392
+ else
393
+ ManipulateStructure.new(dataelements,endpoints,local,additional).instance_eval(code,where,1)
394
+ end
395
+ end
396
+ end
397
+
358
398
  def join_branches(branches); end
359
- def manipulate(mr,code,where,result=nil,options=nil); mr.instance_eval(code,where,1); end
360
399
  end # }}}
361
400
 
362
401
  class Position # {{{
@@ -461,9 +500,13 @@ class WEEL
461
500
  @__weel_state = :ready
462
501
  @__weel_status = Status.new(0,"undefined")
463
502
  @__weel_sim = -1
503
+ @__weel_lock = Mutex.new
464
504
  end #}}}
465
505
  attr_accessor :__weel_search_positions, :__weel_positions, :__weel_main, :__weel_data, :__weel_endpoints, :__weel_connectionwrapper, :__weel_connectionwrapper_args
466
- attr_reader :__weel_state, :__weel_status
506
+ attr_reader :__weel_state, :__weel_status, :__weel_status
507
+
508
+ # DSL-Construct for translating expressions into static parameters
509
+ def 🠊(code); __weel_eval_expression(code); end
467
510
 
468
511
  # DSL-Constructs for atomic calls to external services (calls) and pure context manipulations (manipulate).
469
512
  # Calls can also manipulate context (after the invoking the external services)
@@ -515,11 +558,12 @@ class WEEL
515
558
  thread[:start_event]&.continue # sometimes start event might not even exist yet (i.e. race condition)
516
559
  end
517
560
 
518
- Thread.current[:branch_event].wait unless self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped
561
+ Thread.current[:branch_event].wait unless self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped || Thread.current[:branches].length == 0
519
562
 
520
563
  __weel_sim_stop(:parallel,hw,pos) if __weel_sim
521
564
 
522
565
  cw = @__weel_connectionwrapper.new @__weel_connectionwrapper_args
566
+
523
567
  cw.join_branches(Thread.current[:branch_traces])
524
568
 
525
569
  unless self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped
@@ -635,11 +679,11 @@ class WEEL
635
679
  # searchmode is active (to find the starting position)
636
680
  def alternative(condition,args={},&block)# {{{
637
681
  return if self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
638
- hw, pos = __weel_sim_start(:alternative,args.merge(:mode => Thread.current[:alternative_mode].last, :condition => ((condition.is_a?(String) || condition.is_a?(Proc)) ? condition : nil))) if __weel_sim
682
+ hw, pos = __weel_sim_start(:alternative,args.merge(:mode => Thread.current[:alternative_mode].last, :condition => (condition.is_a?(String) ? condition : nil))) if __weel_sim
639
683
  Thread.current[:mutex] ||= Mutex.new
640
684
  Thread.current[:mutex].synchronize do
641
685
  return if Thread.current[:alternative_mode][-1] == :exclusive && Thread.current[:alternative_executed][-1] == true
642
- if (condition.is_a?(String) || condition.is_a?(Proc)) && !__weel_sim
686
+ if condition.is_a?(String) && !__weel_sim
643
687
  condition = __weel_eval_condition(condition, args)
644
688
  end
645
689
  Thread.current[:alternative_executed][-1] = true if condition
@@ -647,7 +691,7 @@ class WEEL
647
691
  searchmode = __weel_is_in_search_mode
648
692
  __weel_protect_yield(&block) if searchmode || __weel_sim || condition
649
693
  Thread.current[:alternative_executed][-1] = true if __weel_is_in_search_mode != searchmode # we swiched from searchmode true to false, thus branch has been executed which is as good as evaling the condition to true
650
- __weel_sim_stop(:alternative,hw,pos,args.merge(:mode => Thread.current[:alternative_mode].last, :condition => ((condition.is_a?(String) || condition.is_a?(Proc)) ? condition : nil))) if __weel_sim
694
+ __weel_sim_stop(:alternative,hw,pos,args.merge(:mode => Thread.current[:alternative_mode].last, :condition => (condition.is_a?(String) ? condition : nil))) if __weel_sim
651
695
  end # }}}
652
696
  def otherwise(args={},&block) # {{{
653
697
  return if self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
@@ -673,7 +717,7 @@ class WEEL
673
717
 
674
718
  # Defines a Cycle (loop/iteration)
675
719
  def loop(condition,args={},&block)# {{{
676
- unless condition.is_a?(Array) && (condition[0].is_a?(Proc) || condition[0].is_a?(String)) && [:pre_test,:post_test].include?(condition[1]) && args.is_a?(Hash)
720
+ unless condition[0].is_a?(String) && [:pre_test,:post_test].include?(condition[1]) && args.is_a?(Hash)
677
721
  raise "condition must be called pre_test{} or post_test{}"
678
722
  end
679
723
  return if self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
@@ -690,7 +734,7 @@ class WEEL
690
734
  end
691
735
  end
692
736
  if __weel_sim
693
- cond = condition[0].is_a?(Proc) ? true : condition[0]
737
+ cond = condition[0]
694
738
  hw, pos = __weel_sim_start(:loop,args.merge(:testing=>condition[1],:condition=>cond))
695
739
  catch :escape do
696
740
  __weel_protect_yield(&block)
@@ -781,8 +825,8 @@ class WEEL
781
825
 
782
826
  def __weel_eval_condition(condition,args={}) #{{{
783
827
  begin
784
- connectionwrapper = @__weel_connectionwrapper.new @__weel_connectionwrapper_args unless condition.is_a?(Proc)
785
- condition.is_a?(Proc) ? condition.call : connectionwrapper.test_condition(ReadStructure.new(@__weel_data,@__weel_endpoints,Thread.current[:local],connectionwrapper.additional),condition,args)
828
+ connectionwrapper = @__weel_connectionwrapper.new @__weel_connectionwrapper_args
829
+ connectionwrapper.test_condition(@__weel_data,@__weel_endpoints,Thread.current[:local],connectionwrapper.additional,condition,args)
786
830
  rescue NameError => err # don't look into it, or it will explode
787
831
  # if you access $! here, BOOOM
788
832
  self.__weel_state = :stopping
@@ -795,6 +839,22 @@ class WEEL
795
839
  end
796
840
  end #}}}
797
841
 
842
+ def __weel_eval_expression(expression) #{{{
843
+ begin
844
+ connectionwrapper = @__weel_connectionwrapper.new @__weel_connectionwrapper_args
845
+ connectionwrapper.eval_expression(@__weel_data,@__weel_endpoints,Thread.current[:local],connectionwrapper.additional,expression)
846
+ rescue NameError => err # don't look into it, or it will explode
847
+ # if you access $! here, BOOOM
848
+ self.__weel_state = :stopping
849
+ @__weel_connectionwrapper::inform_syntax_error(@__weel_connectionwrapper_args,Exception.new("eval_expression: `#{err.name}` is not a thing that can be used. Maybe it is meant to be a string and you forgot quotes?"),nil)
850
+ nil
851
+ rescue => err
852
+ self.__weel_state = :stopping
853
+ @__weel_connectionwrapper::inform_syntax_error(@__weel_connectionwrapper_args,Exception.new(err.message),nil)
854
+ nil
855
+ end
856
+ end #}}}
857
+
798
858
  def __weel_progress(position, uuid, skip=false) #{{{
799
859
  ipc = {}
800
860
  branch = Thread.current
@@ -855,28 +915,19 @@ class WEEL
855
915
 
856
916
  wp = __weel_progress position, connectionwrapper.activity_uuid
857
917
 
858
- # searchmode position is after, jump directly to vote_sync_after
859
- raise Signal::Proceed if searchmode == :after
860
-
861
918
  case type
862
919
  when :manipulate
863
920
  raise Signal::Stop unless connectionwrapper.vote_sync_before
864
921
  raise Signal::Skip if self.__weel_state == :stopping || self.__weel_state == :finishing
865
922
 
866
- if finalize.is_a?(Proc) || finalize.is_a?(String)
923
+ if finalize.is_a?(String)
867
924
  connectionwrapper.activity_manipulate_handle(parameters)
868
925
  connectionwrapper.inform_activity_manipulate
869
- if finalize.is_a?(Proc)
870
- mr = ManipulateStructure.new(@__weel_data,@__weel_endpoints,@__weel_status,Thread.current[:local],connectionwrapper.additional)
871
- mr.instance_eval(&finalize)
872
- elsif finalize.is_a?(String)
873
- mr = ManipulateStructure.new(@__weel_data,@__weel_endpoints,@__weel_status,Thread.current[:local],connectionwrapper.additional)
874
- connectionwrapper.manipulate(mr,finalize,'Activity ' + position.to_s)
875
- end
926
+ struct = connectionwrapper.manipulate(false,@__weel_lock,@__weel_data,@__weel_endpoints,@__weel_status,Thread.current[:local],connectionwrapper.additional,finalize,'Activity ' + position.to_s)
876
927
  connectionwrapper.inform_manipulate_change(
877
- ((mr && mr.changed_status) ? @__weel_status : nil),
878
- ((mr && mr.changed_data.any?) ? mr.changed_data.uniq : nil),
879
- ((mr && mr.changed_endpoints.any?) ? mr.changed_endpoints.uniq : nil),
928
+ ((struct && struct.changed_status) ? @__weel_status : nil),
929
+ ((struct && struct.changed_data.any?) ? struct.changed_data.uniq : nil),
930
+ ((struct && struct.changed_endpoints.any?) ? struct.changed_endpoints.uniq : nil),
880
931
  @__weel_data,
881
932
  @__weel_endpoints
882
933
  )
@@ -888,15 +939,13 @@ class WEEL
888
939
  begin
889
940
  again = catch Signal::Again do
890
941
  connectionwrapper.mem_guard
891
- rs = ReadStructure.new(@__weel_data,@__weel_endpoints,Thread.current[:local],connectionwrapper.additional)
892
- if prepare
893
- if prepare.is_a?(Proc)
894
- rs.instance_exec(&prepare)
895
- elsif prepare.is_a?(String)
896
- connectionwrapper.manipulate(rs,prepare,'Activity ' + position.to_s)
897
- end
942
+ struct = if prepare
943
+ connectionwrapper.manipulate(true,@__weel_lock,@__weel_data,@__weel_endpoints,@__weel_status,Thread.current[:local],connectionwrapper.additional,prepare,'Activity ' + position.to_s)
944
+ else
945
+ # just the read structure, no code exec necessary
946
+ ReadStructure.new(@__weel_data,@__weel_endpoints,Thread.current[:local],connectionwrapper.additional)
898
947
  end
899
- params = connectionwrapper.prepare(rs,endpoint,parameters)
948
+ params = connectionwrapper.prepare(struct,endpoint,parameters)
900
949
  raise Signal::Stop unless connectionwrapper.vote_sync_before(params)
901
950
  raise Signal::Skip if self.__weel_state == :stopping || self.__weel_state == :finishing
902
951
 
@@ -935,30 +984,19 @@ class WEEL
935
984
  else
936
985
  finalize
937
986
  end
938
- if code.is_a?(Proc) || code.is_a?(String)
987
+ if code.is_a?(String)
939
988
  connectionwrapper.inform_activity_manipulate
940
- if code.is_a?(Proc)
941
- mr = ManipulateStructure.new(@__weel_data,@__weel_endpoints,@__weel_status,Thread.current[:local],connectionwrapper.additional)
942
- ma = catch Signal::Again do
943
- case code.arity
944
- when 1; mr.instance_exec(connectionwrapper.activity_result_value,&code)
945
- when 2; mr.instance_exec(connectionwrapper.activity_result_value,&code)
946
- else
947
- mr.instance_exec(&code)
948
- end
949
- 'yes' # ma sadly will have nil when i just throw
950
- end
951
- elsif code.is_a?(String)
952
- mr = ManipulateStructure.new(@__weel_data,@__weel_endpoints,@__weel_status,Thread.current[:local],connectionwrapper.additional)
953
- ma = catch Signal::Again do
954
- connectionwrapper.manipulate(mr,code,'Activity ' + position.to_s,connectionwrapper.activity_result_value,connectionwrapper.activity_result_options)
955
- 'yes' # ma sadly will have nil when i just throw
956
- end
989
+ struct = nil
990
+
991
+ # when you throw without parameters, ma contains nil, so we return Signal::Proceed to give ma a meaningful value in other cases
992
+ ma = catch Signal::Again do
993
+ struct = connectionwrapper.manipulate(false,@__weel_lock,@__weel_data,@__weel_endpoints,@__weel_status,Thread.current[:local],connectionwrapper.additional,code,'Activity ' + position.to_s,connectionwrapper.activity_result_value,connectionwrapper.activity_result_options)
994
+ Signal::Proceed
957
995
  end
958
996
  connectionwrapper.inform_manipulate_change(
959
- (mr.changed_status ? @__weel_status : nil),
960
- (mr.changed_data.any? ? mr.changed_data.uniq : nil),
961
- (mr.changed_endpoints.any? ? mr.changed_endpoints.uniq : nil),
997
+ ((struct && struct.changed_status) ? @__weel_status : nil),
998
+ ((struct && struct.changed_data.any?) ? struct.changed_data.uniq : nil),
999
+ ((struct && struct.changed_endpoints.any?) ? struct.changed_endpoints.uniq : nil),
962
1000
  @__weel_data,
963
1001
  @__weel_endpoints
964
1002
  )
@@ -1166,45 +1204,6 @@ public
1166
1204
  @dslr.__weel_state = :abandoned
1167
1205
  end # }}}
1168
1206
 
1169
- # Set search positions
1170
- # set new_weel_search to a boolean (or anything else) to start the process from beginning (reset serach positions)
1171
- def search(new_weel_search=false) # {{{
1172
- @dslr.__weel_search_positions.clear
1173
-
1174
- new_weel_search = [new_weel_search] if new_weel_search.is_a?(Position)
1175
-
1176
- if !new_weel_search.is_a?(Array) || new_weel_search.empty?
1177
- false
1178
- else
1179
- new_weel_search.each do |search_position|
1180
- @dslr.__weel_search_positions[search_position.position] = search_position
1181
- end
1182
- true
1183
- end
1184
- end # }}}
1185
-
1186
- def data(new_data=nil) # {{{
1187
- unless new_data.nil? || !new_data.is_a?(Hash)
1188
- new_data.each{ |k,v| @dslr.__weel_data[k] = v }
1189
- end
1190
- @dslr.__weel_data
1191
- end # }}}
1192
- def endpoints(new_endpoints=nil) # {{{
1193
- unless new_endpoints.nil? || !new_endpoints.is_a?(Hash)
1194
- new_endpoints.each{ |k,v| @dslr.__weel_endpoints[k] = v }
1195
- end
1196
- @dslr.__weel_endpoints
1197
- end # }}}
1198
- def endpoint(new_endpoints) # {{{
1199
- unless new_endpoints.nil? || !new_endpoints.is_a?(Hash) || !new_endpoints.length == 1
1200
- new_endpoints.each{ |k,v| @dslr.__weel_endpoints[k] = v }
1201
- end
1202
- nil
1203
- end # }}}
1204
- def status # {{{
1205
- @dslr.__weel_status
1206
- end # }}}
1207
-
1208
1207
  # get/set workflow description
1209
1208
  def description(&blk)
1210
1209
  self.description=(blk)
@@ -1248,6 +1247,45 @@ public
1248
1247
  end
1249
1248
  end # }}}
1250
1249
 
1250
+ # Set search positions
1251
+ # set new_weel_search to a boolean (or anything else) to start the process from beginning (reset serach positions)
1252
+ def search(new_weel_search=false) # {{{
1253
+ @dslr.__weel_search_positions.clear
1254
+
1255
+ new_weel_search = [new_weel_search] if new_weel_search.is_a?(Position)
1256
+
1257
+ if !new_weel_search.is_a?(Array) || new_weel_search.empty?
1258
+ false
1259
+ else
1260
+ new_weel_search.each do |search_position|
1261
+ @dslr.__weel_search_positions[search_position.position] = search_position
1262
+ end
1263
+ true
1264
+ end
1265
+ end # }}}
1266
+
1267
+ def data(new_data=nil) # {{{
1268
+ unless new_data.nil? || !new_data.is_a?(Hash)
1269
+ new_data.each{ |k,v| @dslr.__weel_data[k] = v }
1270
+ end
1271
+ @dslr.__weel_data
1272
+ end # }}}
1273
+ def endpoints(new_endpoints=nil) # {{{
1274
+ unless new_endpoints.nil? || !new_endpoints.is_a?(Hash)
1275
+ new_endpoints.each{ |k,v| @dslr.__weel_endpoints[k] = v }
1276
+ end
1277
+ @dslr.__weel_endpoints
1278
+ end # }}}
1279
+ def endpoint(new_endpoints) # {{{
1280
+ unless new_endpoints.nil? || !new_endpoints.is_a?(Hash) || !new_endpoints.length == 1
1281
+ new_endpoints.each{ |k,v| @dslr.__weel_endpoints[k] = v }
1282
+ end
1283
+ nil
1284
+ end # }}}
1285
+ def status # {{{
1286
+ @dslr.__weel_status
1287
+ end # }}}
1288
+
1251
1289
  # Stop the workflow execution
1252
1290
  def stop # {{{
1253
1291
  Thread.new do
@@ -18,6 +18,7 @@ class TestConnectionWrapper < WEEL::ConnectionWrapperBase
18
18
  @__myhandler_position = position
19
19
  @__myhandler_continue = continue
20
20
  @__myhandler_returnValue = nil
21
+ @__myhandler_passthrough = nil
21
22
  @t = nil
22
23
  end
23
24
 
@@ -32,6 +33,10 @@ class TestConnectionWrapper < WEEL::ConnectionWrapperBase
32
33
  $long_track << "CALL #{@__myhandler_position}: passthrough=[#{passthrough}], endpoint=[#{@__myhandler_endpoint}], parameters=[#{parameters.inspect}]\n"
33
34
  $short_track << "C#{@__myhandler_position}"
34
35
 
36
+ if parameters[:async]
37
+ @__myhandler_passthrough = true
38
+ end
39
+
35
40
  if @__myhandler_endpoint == 'stop it'
36
41
  raise WEEL::Signal::Stop
37
42
  end
@@ -76,7 +81,7 @@ class TestConnectionWrapper < WEEL::ConnectionWrapperBase
76
81
  # information about how to continue the call. This passthrough-value is given
77
82
  # to activity_handle if the workflow is configured to do so.
78
83
  def activity_passthrough_value #{{{
79
- nil
84
+ @__myhandler_passthrough
80
85
  end #}}}
81
86
 
82
87
  # Called if the execution of the actual activity_handle is not necessary anymore
@@ -18,10 +18,10 @@ class TestWorkflowControl < Test::Unit::TestCase
18
18
  assert(@wf.data[:x] == "begin_Handler_Dummy_Result_end", "Ending environment not correct, see result=#{@wf.data[:x].inspect}")
19
19
  end
20
20
 
21
- def test_stop
21
+ def test_stop_async
22
22
  @wf.description do
23
23
  call :a_test_1_1, :endpoint1
24
- call :a_test_1_2, :endpoint1, parameters: { :call => Proc.new{ sleep 0.5 } }
24
+ call :a_test_1_2, :endpoint1, parameters: { :call => Proc.new{ sleep 0.5 }, :async => true }
25
25
  call :a_test_1_3, :endpoint1
26
26
  end
27
27
  @wf.search WEEL::Position.new(:a_test_1_1, :at)
@@ -38,6 +38,27 @@ class TestWorkflowControl < Test::Unit::TestCase
38
38
  assert(@wf.positions[0].position == :a_test_1_2, "Stop-position has wrong value: #{@wf.positions[0].position} instead of :a_test_2_1")
39
39
  assert(@wf.positions[0].detail == :at, "Stop-Position is not :at")
40
40
  end
41
+
42
+ def test_stop
43
+ @wf.description do
44
+ call :a_test_1_1, :endpoint1
45
+ call :a_test_1_2, :endpoint1, parameters: { :call => Proc.new{ sleep 0.5 } }
46
+ call :a_test_1_3, :endpoint1
47
+ end
48
+ @wf.search WEEL::Position.new(:a_test_1_1, :at)
49
+ wf = @wf.start
50
+ sleep(0.2)
51
+ @wf.stop.join
52
+ wf.join
53
+ wf_assert("DONE a_test_1_1")
54
+ wf_assert("STOPPED a_test_1_2")
55
+ wf_assert("DONE a_test_1_2",true)
56
+ wf_assert("CALL a_test_1_2:")
57
+ assert(@wf.state == :stopped, "Stopped workflow has wrong state, #{@wf.state} instead of :stopped")
58
+ assert(@wf.positions.is_a?(Array), "@wf.positions has wrong type, should be an array, it is: #{@wf.positions.inspect}")
59
+ assert(@wf.positions[0].position == :a_test_1_2, "Stop-position has wrong value: #{@wf.positions[0].position} instead of :a_test_2_1")
60
+ assert(@wf.positions[0].detail == :after, "Stop-Position is not :at")
61
+ end
41
62
  # def test_continue
42
63
  # @wf.description do
43
64
  # call :a_test_1_1, :endpoint1
data/weel.gemspec CHANGED
@@ -1,8 +1,8 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "weel"
3
- s.version = "1.99.118"
3
+ s.version = "1.99.121"
4
4
  s.platform = Gem::Platform::RUBY
5
- s.license = "LGPL-3.0"
5
+ s.license = "LGPL-3.0-or-later"
6
6
  s.summary = "Workflow Execution Engine Library (WEEL)"
7
7
 
8
8
  s.description = "see http://cpee.org"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: weel
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.99.118
4
+ version: 1.99.121
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juergen eTM Mangler
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-06-13 00:00:00.000000000 Z
12
+ date: 2024-09-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: test-unit
@@ -58,7 +58,6 @@ files:
58
58
  - test/basic/tc_search.rb
59
59
  - test/basic/tc_state.rb
60
60
  - test/basic/tc_wf_control.rb
61
- - test/basic/tc_wf_stop.rb
62
61
  - test/complex/tc_generalsynchonizingmerge_loopsearch.rb
63
62
  - test/complex/tc_parallel_stop.rb
64
63
  - test/complexsearch/tc_search.rb
@@ -66,7 +65,6 @@ files:
66
65
  - test/exec/tc_exec.rb
67
66
  - test/speed/tc_speed1.rb
68
67
  - test/speed/tc_speed2.rb
69
- - test/test
70
68
  - test/wfp_adv_branching/tc_generalizedjoin.rb
71
69
  - test/wfp_adv_branching/tc_generalsynchronizingmerge.rb
72
70
  - test/wfp_adv_branching/tc_localsynchronizingmerge.rb
@@ -85,7 +83,7 @@ files:
85
83
  - weel.gemspec
86
84
  homepage: http://cpee.org/
87
85
  licenses:
88
- - LGPL-3.0
86
+ - LGPL-3.0-or-later
89
87
  metadata: {}
90
88
  post_install_message:
91
89
  rdoc_options: []
@@ -102,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
100
  - !ruby/object:Gem::Version
103
101
  version: '0'
104
102
  requirements: []
105
- rubygems_version: 3.5.9
103
+ rubygems_version: 3.5.11
106
104
  signing_key:
107
105
  specification_version: 4
108
106
  summary: Workflow Execution Engine Library (WEEL)
@@ -113,7 +111,6 @@ test_files:
113
111
  - test/TestConnectionWrapper.rb
114
112
  - test/TestMixin.rb
115
113
  - test/TestWorkflow.rb
116
- - test/test
117
114
  - test/basic/tc_choose.rb
118
115
  - test/basic/tc_codereplace.rb
119
116
  - test/basic/tc_data.rb
@@ -123,7 +120,6 @@ test_files:
123
120
  - test/basic/tc_search.rb
124
121
  - test/basic/tc_state.rb
125
122
  - test/basic/tc_wf_control.rb
126
- - test/basic/tc_wf_stop.rb
127
123
  - test/complex/tc_generalsynchonizingmerge_loopsearch.rb
128
124
  - test/complex/tc_parallel_stop.rb
129
125
  - test/complexsearch/tc_search.rb
@@ -1,34 +0,0 @@
1
- require 'test/unit'
2
- require File.expand_path(::File.dirname(__FILE__) + '/../TestWorkflow')
3
-
4
- class TestWorkflowControl < Test::Unit::TestCase
5
- include TestMixin
6
-
7
- def test_stop
8
- @wf.description do
9
- call :a_test_1_1, :endpoint1
10
- call :a_test_1_2, :endpoint1, parameters: { :call => Proc.new{ sleep 0.5 } }
11
- call :a_test_1_3, :endpoint1
12
- end
13
- @wf.search WEEL::Position.new(:a_test_1_1, :at)
14
- wf = @wf.start
15
- sleep(0.2)
16
- @wf.stop.join
17
- wf.join
18
- wf_assert("DONE a_test_1_1")
19
- wf_assert("STOPPED a_test_1_2")
20
- wf_assert("DONE a_test_1_2")
21
- wf_assert("CALL a_test_1_2:")
22
- assert(@wf.state == :stopped, "Stopped workflow has wrong state, #{@wf.state} instead of :stopped")
23
- assert(@wf.positions.is_a?(Array), "@wf.positions has wrong type, should be an array, it is: #{@wf.positions.inspect}")
24
- assert(@wf.positions[0].position == :a_test_1_2, "Stop-position has wrong value: #{@wf.positions[0].position} instead of :a_test_2_1")
25
- assert(@wf.positions[0].detail == :after, "Stop-Position is not :at")
26
- end
27
-
28
- def test_stops
29
- 1.upto 1000 do |i|
30
- puts '.'
31
- test_stop
32
- end
33
- end
34
- end
data/test/test DELETED
@@ -1,39 +0,0 @@
1
- ruby basic/tc_choose.rb
2
- ruby basic/tc_codereplace.rb
3
- ruby basic/tc_data.rb
4
- ruby basic/tc_endpoint.rb
5
- ruby basic/tc_handler.rb
6
- ruby basic/tc_parallel.rb
7
- ruby basic/tc_search.rb
8
- ruby basic/tc_state.rb
9
- ruby basic/tc_wf_control.rb
10
- ruby complexsearch/tc_search.rb
11
- ruby complex/tc_generalsynchonizingmerge_loopsearch.rb
12
- ruby complex/tc_parallel_stop.rb
13
- ruby exec/tc_again.rb
14
- ruby exec/tc_exec.rb
15
- ruby simulation/dl.rb
16
- ruby simulation/tt_permutationtester.rb
17
- ruby simulation/tt_sim_activity.rb
18
- ruby simulation/tt_sim_choose1.rb
19
- ruby simulation/tt_sim_choose2.rb
20
- ruby simulation/tt_sim_loop_parallel_choose.rb
21
- ruby simulation/tt_sim_loop_parallel.rb
22
- ruby simulation/tt_sim_loop.rb
23
- ruby speed/tc_speed1.rb
24
- ruby speed/tc_speed2.rb
25
- ruby wfp_adv_branching/tc_generalizedjoin.rb
26
- ruby wfp_adv_branching/tc_generalsynchronizingmerge.rb
27
- ruby wfp_adv_branching/tc_localsynchronizingmerge.rb
28
- ruby wfp_adv_branching/tc_multichoice_structuredsynchronizingmerge.rb
29
- ruby wfp_adv_branching/tc_multimerge.rb
30
- ruby wfp_adv_branching/tc_structured_discriminator.rb
31
- ruby wfp_adv_branching/tc_structured_partial_join.rb
32
- ruby wfp_adv_branching/tc_threadmerge.rb
33
- ruby wfp_adv_branching/tc_threadsplit.rb
34
- ruby wfp_basic/tc_exclusivechoice_simplemerge.rb
35
- ruby wfp_basic/tc_parallelsplit_synchronization.rb
36
- ruby wfp_basic/tc_sequence.rb
37
- ruby wfp_iteration/tc_structuredloop.rb
38
- ruby wfp_state_based/tc_deferredchoice.rb
39
- ruby wfp_state_based/tc_interleavedparallelrouting.rb