weel 1.99.81 → 1.99.83

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: 71b00df67a5ce45cc411d04bdcb57c0c2add9a37bf73df697dc13a19d57edff1
4
- data.tar.gz: fa82207e6df3ba11c89b2fb661d0ffe2e801b0dee91674b9aabff2a6406ebd37
3
+ metadata.gz: 05367a0dcc8066aeb8180358efed5612c976b7b97e5ea8f5047a83bc482de8ff
4
+ data.tar.gz: 87a40bbb853caf454d43a8632e9d2535b4cdcfab040bf2490095dbdcbea2123f
5
5
  SHA512:
6
- metadata.gz: 394ffac0c9bbb8777417254ff890735d3460d82a3657b21c563663770d1d2341e710a18cb768db5ae35a9978b521c617086f7bb68654c824299c3fc74dc6a57f
7
- data.tar.gz: 249881015b74398a230ae218403267ea0276597cc380d19649b1f794970aaa63ba87f0122a42dee5d61b3bdbe3870a97a7db1c1afd21391b84d79a8f940b9c3d
6
+ metadata.gz: b90f1b6a44a0ef9e47a60a8cd1da7f904691377859fd7aab2bcf19b100e1de7eea1534235944060b5101f6836c7c307e868db8828b26cbc9b5363dbb6d10012e
7
+ data.tar.gz: '077059c2ad549cf6bb0debe569c9bed27b94c5e02c248a0b8662b457c014d726b38924b593b5005abf29dee60cb7b7de164dabcdabb6893ab39c6496319b2634'
@@ -0,0 +1,35 @@
1
+ All code in this package is provided under the LGPL-3 license.
2
+ Please read the file COPYING.
3
+
4
+ Tested for MRI 2.6, 2.7
5
+
6
+ # Example Process (DSL)
7
+
8
+ ```ruby
9
+ class SimpleWorkflow < WEEL
10
+ handlerwrapper SimpleHandlerWrapper
11
+
12
+ endpoint :ep1 => "orf.at"
13
+ data :a => 17
14
+
15
+ control flow do
16
+ call :a1, :ep1, parameters: { :a => data.a, :b => 2 } do
17
+ data.a += 3
18
+ end
19
+ end
20
+ end
21
+ ```
22
+
23
+ HandlerWrappers are classes that implement communication protocols. Endpoints hold the communication targets and can be reused throughout the control flow. Data elements are control flow scoped variables.
24
+
25
+ Please check out the "example" directory to see a minimal set of necessary artefacts.
26
+
27
+ # Further Reading
28
+
29
+ For an evaluation and description of all available control flow statements, see https://arxiv.org/pdf/1003.3330.pdf.
30
+
31
+ # Installation
32
+
33
+ ```bash
34
+ gem install weel
35
+ ```
@@ -40,33 +40,43 @@ class WEEL
40
40
  class Salvage < Exception; end
41
41
  end # }}}
42
42
 
43
- class ReadStructure # {{{
44
- def initialize(data,endpoints)
45
- @__weel_data = data.dup
46
- @__weel_data.transform_values! do |v|
47
- if Object.const_defined?(:XML) && XML.const_defined?(:Smart) && v.is_a?(XML::Smart::Dom)
48
- v.root.to_doc
49
- else
43
+ class ReadStructure # {{{
44
+ def initialize(data,endpoints,additional)
45
+ @__weel_data = data.dup
46
+ @__weel_data.transform_values! do |v|
47
+ if Object.const_defined?(:XML) && XML.const_defined?(:Smart) && v.is_a?(XML::Smart::Dom)
48
+ v.root.to_doc
49
+ else
50
+ begin
51
+ Marshal.load(Marshal.dump(v))
52
+ rescue
53
+ v.to_s rescue nil
54
+ end
55
+ end
56
+ end
57
+ @__weel_endpoints = endpoints.dup
58
+ @__weel_endpoints.transform_values!{ |v| v.dup }
59
+ @additional = additional
60
+ end
61
+
62
+ def method_missing(m,args,&block)
63
+ if @additional.exists?(m)
50
64
  begin
51
- Marshal.load(Marshal.dump(v))
65
+ Marshal.load(Marshal.dump(@aditional[m]))
52
66
  rescue
53
67
  v.to_s rescue nil
54
68
  end
55
69
  end
56
70
  end
57
- @__weel_endpoints = endpoints.dup
58
- @__weel_endpoints.transform_values!{ |v| v.dup }
59
- end
60
-
61
- def data
62
- ReadHash.new(@__weel_data)
63
- end
64
- def endpoints
65
- ReadHash.new(@__weel_endpoints)
66
- end
67
- end # }}}
71
+ def data
72
+ ReadHash.new(@__weel_data)
73
+ end
74
+ def endpoints
75
+ ReadHash.new(@__weel_endpoints)
76
+ end
77
+ end # }}}
68
78
  class ManipulateStructure # {{{
69
- def initialize(data,endpoints,status)
79
+ def initialize(data,endpoints,status,additional)
70
80
  @__weel_data = data
71
81
  @__weel_data_orig = @__weel_data.transform_values{|val| Marshal.dump(val) } rescue nil
72
82
  @__weel_endpoints = endpoints
@@ -77,6 +87,17 @@ end # }}}
77
87
  @touched_data = []
78
88
  @changed_endpoints = []
79
89
  @touched_endpoints = []
90
+ @additional = additional
91
+ end
92
+
93
+ def method_missing(m,args,&block)
94
+ if @additional.exists?(m)
95
+ begin
96
+ Marshal.load(Marshal.dump(@aditional[m]))
97
+ rescue
98
+ v.to_s rescue nil
99
+ end
100
+ end
80
101
  end
81
102
 
82
103
  def changed_data
@@ -209,17 +230,18 @@ end # }}}
209
230
  def self::inform_state_change(arguments,newstate); end
210
231
  def self::inform_syntax_error(arguments,err,code); end
211
232
  def self::inform_handlerwrapper_error(arguments,err); end
212
- def self::inform_position_change(arguments,ipc); end
213
- def self::modify_position_details(arguments); end
233
+ def self::inform_position_change(arguments,ipc={}); end
214
234
 
215
- def initialize(arguments,endpoint=nil,position=nil,continue=nil); end
235
+ def initialize(arguments,position=nil,continue=nil); end
216
236
 
217
237
  def prepare(readonly, endpoints, parameters, replay=false); parameters; end
238
+ def additional; {}; end
218
239
 
219
240
  def activity_handle(passthrough, parameters); end
220
241
  def activity_manipulate_handle(parameters); end
221
242
 
222
243
  def activity_result_value; end
244
+ def activity_result_options; end
223
245
 
224
246
  def activity_stop; end
225
247
  def activity_passthrough_value; end
@@ -364,8 +386,8 @@ end # }}}
364
386
  # Parallel DSL-Construct
365
387
  # Defines Workflow paths that can be executed parallel.
366
388
  # May contain multiple branches (parallel_branch)
367
- def parallel(type=nil)# {{{
368
- return if self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
389
+ def parallel(type=nil,&block)# {{{
390
+ return if self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped
369
391
 
370
392
  Thread.current[:branches] = []
371
393
  Thread.current[:branch_finished_count] = 0
@@ -374,7 +396,7 @@ end # }}}
374
396
 
375
397
  hw, pos = __weel_sim_start(:parallel) if __weel_sim
376
398
 
377
- __weel_protect_yield(&Proc.new)
399
+ __weel_protect_yield(&block)
378
400
 
379
401
  Thread.current[:branch_wait_count] = (type.is_a?(Hash) && type.size == 1 && type[:wait] != nil && (type[:wait].is_a?(Integer) && type[:wait] > 0) ? type[:wait] : Thread.current[:branches].size)
380
402
  1.upto Thread.current[:branches].size do
@@ -387,10 +409,10 @@ end # }}}
387
409
  if Thread.current[:branch_search] == false
388
410
  thread[:branch_search] = false
389
411
  end
390
- thread[:start_event].continue
412
+ thread[:start_event]&.continue # sometimes start event might not even exist yet (i.e. race condition)
391
413
  end
392
414
 
393
- Thread.current[:branch_event].wait
415
+ Thread.current[:branch_event].wait unless self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped
394
416
 
395
417
  __weel_sim_stop(:parallel,hw,pos) if __weel_sim
396
418
 
@@ -410,7 +432,7 @@ end # }}}
410
432
  end # }}}
411
433
 
412
434
  # Defines a branch of a parallel-Construct
413
- def parallel_branch(*vars)# {{{
435
+ def parallel_branch(*vars,&block)# {{{
414
436
  return if self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
415
437
  branch_parent = Thread.current
416
438
 
@@ -436,14 +458,16 @@ end # }}}
436
458
  Thread.current[:alternative_mode] = [branch_parent[:alternative_mode].last]
437
459
  end
438
460
  branch_parent[:branch_event].continue
439
- Thread.current[:start_event].wait
461
+ Thread.current[:start_event].wait unless self.__weel_state == :stopping || self.__weel_state == :stopped || self.__weel_state == :finishing
440
462
 
441
463
  if __weel_sim
442
464
  handlerwrapper = @__weel_handlerwrapper.new @__weel_handlerwrapper_args
443
465
  handlerwrapper.simulate(:parallel_branch,:start,Thread.current[:branch_sim_pos],current_branch_sim_pos)
444
466
  end
445
467
 
446
- __weel_protect_yield(*local, &Proc.new)
468
+ unless self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
469
+ __weel_protect_yield(*local, &block)
470
+ end
447
471
 
448
472
  __weel_sim_stop(:parallel_branch,handlerwrapper,current_branch_sim_pos) if __weel_sim
449
473
 
@@ -454,7 +478,7 @@ end # }}}
454
478
  branch_parent[:branch_event].continue
455
479
  end
456
480
  end
457
- if self.__weel_state != :stopping && self.__weel_state != :stopped && self.__weel_state != :finishing
481
+ unless self.__weel_state == :stopping || self.__weel_state == :stopped || self.__weel_state == :finishing
458
482
  if Thread.current[:branch_position]
459
483
  @__weel_positions.delete Thread.current[:branch_position]
460
484
  begin
@@ -471,14 +495,14 @@ end # }}}
471
495
  # Choose DSL-Construct
472
496
  # Defines a choice in the Workflow path.
473
497
  # May contain multiple execution alternatives
474
- def choose(mode=:inclusive) # {{{
498
+ def choose(mode=:inclusive,&block) # {{{
475
499
  return if self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
476
500
  Thread.current[:alternative_executed] ||= []
477
501
  Thread.current[:alternative_mode] ||= []
478
502
  Thread.current[:alternative_executed] << false
479
503
  Thread.current[:alternative_mode] << mode
480
504
  hw, pos = __weel_sim_start(:choose,:mode => Thread.current[:alternative_mode].last) if __weel_sim
481
- __weel_protect_yield(&Proc.new)
505
+ __weel_protect_yield(&block)
482
506
  __weel_sim_stop(:choose,hw,pos,:mode => Thread.current[:alternative_mode].last) if __weel_sim
483
507
  Thread.current[:alternative_executed].pop
484
508
  Thread.current[:alternative_mode].pop
@@ -488,7 +512,7 @@ end # }}}
488
512
  # Defines a possible choice of a choose-Construct
489
513
  # Block is executed if condition == true or
490
514
  # searchmode is active (to find the starting position)
491
- def alternative(condition,args={})# {{{
515
+ def alternative(condition,args={},&block)# {{{
492
516
  return if self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
493
517
  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
494
518
  Thread.current[:mutex] ||= Mutex.new
@@ -499,18 +523,18 @@ end # }}}
499
523
  end
500
524
  Thread.current[:alternative_executed][-1] = true if condition
501
525
  end
502
- __weel_protect_yield(&Proc.new) if __weel_is_in_search_mode || __weel_sim || condition
526
+ __weel_protect_yield(&block) if __weel_is_in_search_mode || __weel_sim || condition
503
527
  __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
504
528
  end # }}}
505
- def otherwise(args={}) # {{{
529
+ def otherwise(args={},&block) # {{{
506
530
  return if self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
507
531
  hw, pos = __weel_sim_start(:otherwise,args.merge(:mode => Thread.current[:alternative_mode].last)) if __weel_sim
508
- __weel_protect_yield(&Proc.new) if __weel_is_in_search_mode || __weel_sim || !Thread.current[:alternative_executed].last
532
+ __weel_protect_yield(&block) if __weel_is_in_search_mode || __weel_sim || !Thread.current[:alternative_executed].last
509
533
  __weel_sim_stop(:otherwise,hw,pos,args.merge(:mode => Thread.current[:alternative_mode].last)) if __weel_sim
510
534
  end # }}}
511
535
 
512
536
  # Defines a critical block (=Mutex)
513
- def critical(id)# {{{
537
+ def critical(id,&block)# {{{
514
538
  @__weel_critical ||= Mutex.new
515
539
  semaphore = nil
516
540
  @__weel_critical.synchronize do
@@ -519,19 +543,19 @@ end # }}}
519
543
  @__weel_critical_sections[id] = semaphore if id
520
544
  end
521
545
  semaphore.synchronize do
522
- __weel_protect_yield(&Proc.new)
546
+ __weel_protect_yield(&block)
523
547
  end
524
548
  end # }}}
525
549
 
526
550
  # Defines a Cycle (loop/iteration)
527
- def loop(condition,args={})# {{{
551
+ def loop(condition,args={},&block)# {{{
528
552
  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)
529
553
  raise "condition must be called pre_test{} or post_test{}"
530
554
  end
531
555
  return if self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
532
556
  if __weel_is_in_search_mode
533
557
  catch :escape do
534
- __weel_protect_yield(&Proc.new)
558
+ __weel_protect_yield(&block)
535
559
  end
536
560
  if __weel_is_in_search_mode
537
561
  return
@@ -545,7 +569,7 @@ end # }}}
545
569
  cond = condition[0].is_a?(Proc) ? true : condition[0]
546
570
  hw, pos = __weel_sim_start(:loop,args.merge(:testing=>condition[1],:condition=>cond))
547
571
  catch :escape do
548
- __weel_protect_yield(&Proc.new)
572
+ __weel_protect_yield(&block)
549
573
  end
550
574
  __weel_sim_stop(:loop,hw,pos,args.merge(:testing=>condition[1],:condition=>cond))
551
575
  return
@@ -554,11 +578,11 @@ end # }}}
554
578
  case condition[1]
555
579
  when :pre_test
556
580
  while __weel_eval_condition(condition[0]) && self.__weel_state != :stopping && self.__weel_state != :stopped && self.__weel_state != :finishing
557
- __weel_protect_yield(&Proc.new)
581
+ __weel_protect_yield(&block)
558
582
  end
559
583
  when :post_test
560
584
  begin
561
- __weel_protect_yield(&Proc.new)
585
+ __weel_protect_yield(&block)
562
586
  end while __weel_eval_condition(condition[0]) && self.__weel_state != :stopping && self.__weel_state != :stopped && self.__weel_state != :finishing
563
587
  end
564
588
  end
@@ -620,7 +644,7 @@ end # }}}
620
644
  def __weel_eval_condition(condition) #{{{
621
645
  begin
622
646
  handlerwrapper = @__weel_handlerwrapper.new @__weel_handlerwrapper_args unless condition.is_a?(Proc)
623
- condition.is_a?(Proc) ? condition.call : handlerwrapper.test_condition(ReadStructure.new(@__weel_data,@__weel_endpoints),condition)
647
+ condition.is_a?(Proc) ? condition.call : handlerwrapper.test_condition(ReadStructure.new(@__weel_data,@__weel_endpoints,handlerwrapper.additional),condition)
624
648
  rescue NameError => err # don't look into it, or it will explode
625
649
  # if you access $! here, BOOOM
626
650
  self.__weel_state = :stopping
@@ -689,10 +713,10 @@ end # }}}
689
713
  handlerwrapper.activity_manipulate_handle(parameters)
690
714
  handlerwrapper.inform_activity_manipulate
691
715
  if finalize.is_a?(Proc)
692
- mr = ManipulateStructure.new(@__weel_data,@__weel_endpoints,@__weel_status)
716
+ mr = ManipulateStructure.new(@__weel_data,@__weel_endpoints,@__weel_status,handlerwrapper.additional)
693
717
  mr.instance_eval(&finalize)
694
718
  elsif finalize.is_a?(String)
695
- mr = ManipulateStructure.new(@__weel_data,@__weel_endpoints,@__weel_status)
719
+ mr = ManipulateStructure.new(@__weel_data,@__weel_endpoints,@__weel_status,handlerwrapper.additional)
696
720
  handlerwrapper.manipulate(mr,finalize)
697
721
  end
698
722
  handlerwrapper.inform_manipulate_change(
@@ -709,10 +733,10 @@ end # }}}
709
733
  when :call
710
734
  begin
711
735
  again = catch Signal::Again do
712
- rs = ReadStructure.new(@__weel_data,@__weel_endpoints)
736
+ rs = ReadStructure.new(@__weel_data,@__weel_endpoints,handlerwrapper.additional)
713
737
  if prepare
714
738
  if prepare.is_a?(Proc)
715
- rs.instance_exec &prepare
739
+ rs.instance_exec(&prepare)
716
740
  elsif prepare.is_a?(String)
717
741
  rs.instance_eval prepare
718
742
  end
@@ -759,18 +783,18 @@ end # }}}
759
783
  if code.is_a?(Proc) || code.is_a?(String)
760
784
  handlerwrapper.inform_activity_manipulate
761
785
  if code.is_a?(Proc)
762
- mr = ManipulateStructure.new(@__weel_data,@__weel_endpoints,@__weel_status)
763
- case code.arity
764
- when 1; mr.instance_exec(handlerwrapper.activity_result_value,&code)
765
- when 2; mr.instance_exec(handlerwrapper.activity_result_value,&code)
766
- else
767
- ma = catch Signal::Again do
786
+ mr = ManipulateStructure.new(@__weel_data,@__weel_endpoints,@__weel_status,handlerwrapper.additional)
787
+ ma = catch Signal::Again do
788
+ case code.arity
789
+ when 1; mr.instance_exec(handlerwrapper.activity_result_value,&code)
790
+ when 2; mr.instance_exec(handlerwrapper.activity_result_value,&code)
791
+ else
768
792
  mr.instance_exec(&code)
769
- 'yes' # ma sadly will have nil when i just throw
770
- end
793
+ end
794
+ 'yes' # ma sadly will have nil when i just throw
771
795
  end
772
796
  elsif code.is_a?(String)
773
- mr = ManipulateStructure.new(@__weel_data,@__weel_endpoints,@__weel_status)
797
+ mr = ManipulateStructure.new(@__weel_data,@__weel_endpoints,@__weel_status,handlerwrapper.additional)
774
798
  ma = catch Signal::Again do
775
799
  handlerwrapper.manipulate(mr,code,handlerwrapper.activity_result_value,handlerwrapper.activity_result_options)
776
800
  'yes' # ma sadly will have nil when i just throw
@@ -8,16 +8,24 @@ class TestHandlerWrapper < WEEL::HandlerWrapperBase
8
8
  $short_track << "E"
9
9
  raise(err)
10
10
  end
11
+ def self::inform_handlerwrapper_error(arguments,err)
12
+ $long_track += "HW ERROR: #{err}\n"
13
+ $short_track << "E"
14
+ end
11
15
 
12
- def initialize(args,endpoint=nil,position=nil,continue=nil)
16
+ def initialize(args,position=nil,continue=nil)
13
17
  @__myhandler_stopped = false
14
18
  @__myhandler_position = position
15
19
  @__myhandler_continue = continue
16
- @__myhandler_endpoint = endpoint
17
20
  @__myhandler_returnValue = nil
18
21
  @t = nil
19
22
  end
20
23
 
24
+ def prepare(readonly, endpoints, parameters, replay=false)
25
+ @__myhandler_endpoint = readonly.endpoints[endpoints]
26
+ parameters
27
+ end
28
+
21
29
  # executes a ws-call to the given endpoint with the given parameters. the call
22
30
  # can be executed asynchron, see finished_call & return_value
23
31
  def activity_handle(passthrough, parameters) #{{{
@@ -68,7 +76,7 @@ class TestHandlerWrapper < WEEL::HandlerWrapperBase
68
76
  # information about how to continue the call. This passthrough-value is given
69
77
  # to activity_handle if the workflow is configured to do so.
70
78
  def activity_passthrough_value #{{{
71
- "SOME passthrough"
79
+ nil
72
80
  end #}}}
73
81
 
74
82
  # Called if the execution of the actual activity_handle is not necessary anymore
@@ -14,14 +14,14 @@ module SimTestMixin #{{{
14
14
  def wf_assert(what,cond=true)
15
15
  if cond
16
16
  assert($long_track.include?(what),"Missing \"#{what}\":\n#{$long_track}")
17
- else
17
+ else
18
18
  assert(!$long_track.include?(what),"Missing \"#{what}\":\n#{$long_track}")
19
19
  end
20
20
  end
21
21
  def wf_sassert(what,cond=true)
22
22
  if cond
23
23
  assert($short_track.include?(what),"#{$short_track}\nNot Present \"#{what}\":\n#{$long_track}")
24
- else
24
+ else
25
25
  assert(!$short_track.include?(what),"#{$short_track}\nNot Present \"#{what}\":\n#{$long_track}")
26
26
  end
27
27
  end
@@ -30,7 +30,6 @@ module SimTestMixin #{{{
30
30
  end
31
31
  end #}}}
32
32
 
33
-
34
33
  module TestMixin #{{{
35
34
  def setup
36
35
  $long_track = ""
@@ -47,14 +46,14 @@ module TestMixin #{{{
47
46
  def wf_assert(what,cond=true)
48
47
  if cond
49
48
  assert($long_track.include?(what),"Missing \"#{what}\":\n#{$long_track}")
50
- else
49
+ else
51
50
  assert(!$long_track.include?(what),"Missing \"#{what}\":\n#{$long_track}")
52
51
  end
53
52
  end
54
53
  def wf_sassert(what,cond=true)
55
54
  if cond
56
55
  assert($short_track.include?(what),"#{$short_track}\nNot Present \"#{what}\":\n#{$long_track}")
57
- else
56
+ else
58
57
  assert(!$short_track.include?(what),"#{$short_track}\nNot Present \"#{what}\":\n#{$long_track}")
59
58
  end
60
59
  end
@@ -9,12 +9,12 @@ class TestWorkflow < WEEL
9
9
  endpoint :stop => 'stop it'
10
10
  endpoint :again => 'again'
11
11
  data :x => 'begin_'
12
-
12
+
13
13
  control flow do
14
14
  call :a1_1, :endpoint1 do |result|
15
15
  data.x += "#{result}"
16
16
  end
17
- parallel :wait => 2 do
17
+ parallel :wait do
18
18
  parallel_branch do
19
19
  call :a2_1_1, :endpoint1
20
20
  end
@@ -24,59 +24,59 @@ class TestChoose < Test::Unit::TestCase
24
24
  wf_assert("CALL a_3:",false)
25
25
  end
26
26
 
27
- def test_choose_otherwise
28
- @wf.description do
29
- choose do
30
- alternative false do
31
- call :a_1, :endpoint1
32
- end
33
- otherwise do
34
- call :a_2, :endpoint1
35
- end
36
- end
37
- end
38
- @wf.start.join
39
- wf_assert("CALL a_2: passthrough=[], endpoint=[http://www.heise.de], parameters=[{}]")
40
- wf_assert("CALL a_1:",false)
41
- end
27
+ # def test_choose_otherwise
28
+ # @wf.description do
29
+ # choose do
30
+ # alternative false do
31
+ # call :a_1, :endpoint1
32
+ # end
33
+ # otherwise do
34
+ # call :a_2, :endpoint1
35
+ # end
36
+ # end
37
+ # end
38
+ # @wf.start.join
39
+ # wf_assert("CALL a_2: passthrough=[], endpoint=[http://www.heise.de], parameters=[{}]")
40
+ # wf_assert("CALL a_1:",false)
41
+ # end
42
42
 
43
- def test_choose_nested
44
- @wf.description do
45
- choose do
46
- alternative true do
47
- choose do
48
- alternative false do
49
- call :a_1_1, :endpoint1
50
- end
51
- alternative true do
52
- choose do
53
- alternative false do
54
- call :a_1_1_1, :endpoint1
55
- end
56
- otherwise do
57
- call :a_1_1_2, :endpoint1
58
- end
59
- end
60
- end
61
- otherwise do
62
- call :a_1_3, :endpoint1
63
- end
64
- end
65
- end
66
- otherwise do
67
- call :a_2, :endpoint1
68
- end
69
- end
70
- end
71
- @wf.start.join
72
- wf_assert("CALL a_1_1_2: passthrough=[], endpoint=[http://www.heise.de], parameters=[{}]",true)
73
- wf_assert("CALL a_1_1:",false)
74
- wf_assert("CALL a_1_1_1:",false)
75
- wf_assert("CALL a_1_3:",false)
76
- wf_assert("CALL a_2:",false)
77
- end
43
+ # def test_choose_nested
44
+ # @wf.description do
45
+ # choose do
46
+ # alternative true do
47
+ # choose do
48
+ # alternative false do
49
+ # call :a_1_1, :endpoint1
50
+ # end
51
+ # alternative true do
52
+ # choose do
53
+ # alternative false do
54
+ # call :a_1_1_1, :endpoint1
55
+ # end
56
+ # otherwise do
57
+ # call :a_1_1_2, :endpoint1
58
+ # end
59
+ # end
60
+ # end
61
+ # otherwise do
62
+ # call :a_1_3, :endpoint1
63
+ # end
64
+ # end
65
+ # end
66
+ # otherwise do
67
+ # call :a_2, :endpoint1
68
+ # end
69
+ # end
70
+ # end
71
+ # @wf.start.join
72
+ # wf_assert("CALL a_1_1_2: passthrough=[], endpoint=[http://www.heise.de], parameters=[{}]",true)
73
+ # wf_assert("CALL a_1_1:",false)
74
+ # wf_assert("CALL a_1_1_1:",false)
75
+ # wf_assert("CALL a_1_3:",false)
76
+ # wf_assert("CALL a_2:",false)
77
+ # end
78
78
 
79
- def test_choose_searchmode
80
-
81
- end
79
+ # def test_choose_searchmode
80
+
81
+ # end
82
82
  end
@@ -4,11 +4,11 @@ require File.expand_path(::File.dirname(__FILE__) + '/../TestWorkflow')
4
4
  class TestState < Test::Unit::TestCase
5
5
  include TestMixin
6
6
 
7
- def test_check_state
8
- s = @wf.state
9
- assert(s.is_a?(Symbol), "state is not a symbol")
10
- assert(s == :ready, "state is not set to :ready, it is #{s}")
11
- end
7
+ # def test_check_state
8
+ # s = @wf.state
9
+ # assert(s.is_a?(Symbol), "state is not a symbol")
10
+ # assert(s == :ready, "state is not set to :ready, it is #{s}")
11
+ # end
12
12
 
13
13
  def test_check_stop_state
14
14
  @wf.start
@@ -18,51 +18,51 @@ 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
22
- @wf.description do
23
- call :a_test_1_1, :endpoint1
24
- call :a_test_1_2, :endpoint1, parameters: { :call => Proc.new{ sleep 0.5 } }
25
- call :a_test_1_3, :endpoint1
26
- end
27
- @wf.search WEEL::Position.new(:a_test_1_1, :at)
28
- wf = @wf.start
29
- sleep(0.2)
30
- @wf.stop.join
31
- wf.join
32
- wf_assert("DONE a_test_1_1")
33
- wf_assert("STOPPED a_test_1_2")
34
- wf_assert("DONE a_test_1_2",false)
35
- wf_assert("CALL a_test_1_2:")
36
- assert(@wf.state == :stopped, "Stopped workflow has wrong state, #{@wf.state} instead of :stopped")
37
- assert(@wf.positions.is_a?(Array), "@wf.positions has wrong type, should be an array, it is: #{@wf.positions.inspect}")
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
- assert(@wf.positions[0].detail == :at, "Stop-Position is not :at")
40
- end
41
- def test_continue
42
- @wf.description do
43
- call :a_test_1_1, :endpoint1
44
- call :a_test_1_2, :endpoint1, parameters: { :call => Proc.new{ sleep 0.5 } }
45
- call :a_test_1_3, :endpoint1
46
- end
47
- @wf.start
48
- sleep(0.2)
49
- @wf.stop.join
21
+ # def test_stop
22
+ # @wf.description do
23
+ # call :a_test_1_1, :endpoint1
24
+ # call :a_test_1_2, :endpoint1, parameters: { :call => Proc.new{ sleep 0.5 } }
25
+ # call :a_test_1_3, :endpoint1
26
+ # end
27
+ # @wf.search WEEL::Position.new(:a_test_1_1, :at)
28
+ # wf = @wf.start
29
+ # sleep(0.2)
30
+ # @wf.stop.join
31
+ # wf.join
32
+ # wf_assert("DONE a_test_1_1")
33
+ # wf_assert("STOPPED a_test_1_2")
34
+ # wf_assert("DONE a_test_1_2",false)
35
+ # wf_assert("CALL a_test_1_2:")
36
+ # assert(@wf.state == :stopped, "Stopped workflow has wrong state, #{@wf.state} instead of :stopped")
37
+ # assert(@wf.positions.is_a?(Array), "@wf.positions has wrong type, should be an array, it is: #{@wf.positions.inspect}")
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
+ # assert(@wf.positions[0].detail == :at, "Stop-Position is not :at")
40
+ # end
41
+ # def test_continue
42
+ # @wf.description do
43
+ # call :a_test_1_1, :endpoint1
44
+ # call :a_test_1_2, :endpoint1, parameters: { :call => Proc.new{ sleep 0.5 } }
45
+ # call :a_test_1_3, :endpoint1
46
+ # end
47
+ # @wf.start
48
+ # sleep(0.2)
49
+ # @wf.stop.join
50
50
 
51
- @wf.search @wf.positions
51
+ # @wf.search @wf.positions
52
52
 
53
- @wf.start.join
54
- wf_sassert('|running|Ca_test_1_1Da_test_1_1Ca_test_1_2|stopping|Sa_test_1_2|stopped||running|Ca_test_1_2Da_test_1_2Ca_test_1_3Da_test_1_3|finished|')
55
- end
56
-
57
- def test_continue_after
58
- @wf.description do
59
- call :c_test_1_1, :endpoint1
60
- call :c_test_1_2, :endpoint1
61
- call :c_test_1_3, :endpoint1
62
- end
63
- @wf.search [WEEL::Position.new(:c_test_1_1, :after)]
64
- @wf.start.join
53
+ # @wf.start.join
54
+ # wf_sassert('|running|Ca_test_1_1Da_test_1_1Ca_test_1_2|stopping|Sa_test_1_2|stopped||running|Ca_test_1_2Da_test_1_2Ca_test_1_3Da_test_1_3|finished|')
55
+ # end
65
56
 
66
- wf_sassert('|running|Cc_test_1_2Dc_test_1_2Cc_test_1_3Dc_test_1_3|finished|')
67
- end
57
+ # def test_continue_after
58
+ # @wf.description do
59
+ # call :c_test_1_1, :endpoint1
60
+ # call :c_test_1_2, :endpoint1
61
+ # call :c_test_1_3, :endpoint1
62
+ # end
63
+ # @wf.search [WEEL::Position.new(:c_test_1_1, :after)]
64
+ # @wf.start.join
65
+
66
+ # wf_sassert('|running|Cc_test_1_2Dc_test_1_2Cc_test_1_3Dc_test_1_3|finished|')
67
+ # end
68
68
  end
@@ -6,7 +6,7 @@ class TestAdventureSearch < Test::Unit::TestCase
6
6
 
7
7
  def test_search_adventure
8
8
  @wf.data[:oee] = 0.25
9
- @wf.description = File.read(::File.dirname(__FILE__) + '/dsl1')
9
+ @wf.description = File.read(__dir__ + '/dsl1')
10
10
  @wf.search [WEEL::Position.new(:a2, :at), WEEL::Position.new(:a13, :at)]
11
11
  @wf.start.join
12
12
 
@@ -0,0 +1,39 @@
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
@@ -1,17 +1,17 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "weel"
3
- s.version = "1.99.81"
3
+ s.version = "1.99.83"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.license = "LGPL-3.0"
6
- s.summary = "Preliminary release of the Workflow Execution Engine Library (WEEL)"
6
+ s.summary = "Workflow Execution Engine Library (WEEL)"
7
7
 
8
8
  s.description = "see http://cpee.org"
9
9
 
10
- s.required_ruby_version = '>=2.3.0'
10
+ s.required_ruby_version = '>=2.6.0'
11
11
 
12
- s.files = Dir['{example/**/*,lib/weel.rb}'] + %w(COPYING Changelog FEATURES INSTALL Rakefile weel.gemspec README AUTHORS)
12
+ s.files = Dir['{example/**/*,lib/weel.rb}'] + %w(COPYING Changelog FEATURES INSTALL Rakefile weel.gemspec README.md AUTHORS)
13
13
  s.require_path = 'lib'
14
- s.extra_rdoc_files = ['README']
14
+ s.extra_rdoc_files = ['README.md']
15
15
  s.test_files = Dir['{test/*,test/*/tc_*.rb}']
16
16
 
17
17
  s.authors = ['Juergen eTM Mangler','Gerhard Stuermer']
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.81
4
+ version: 1.99.83
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: 2020-04-27 00:00:00.000000000 Z
12
+ date: 2020-06-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: test-unit
@@ -30,14 +30,14 @@ email: juergen.mangler@gmail.com
30
30
  executables: []
31
31
  extensions: []
32
32
  extra_rdoc_files:
33
- - README
33
+ - README.md
34
34
  files:
35
35
  - AUTHORS
36
36
  - COPYING
37
37
  - Changelog
38
38
  - FEATURES
39
39
  - INSTALL
40
- - README
40
+ - README.md
41
41
  - Rakefile
42
42
  - example/SimpleHandlerWrapper.rb
43
43
  - example/SimpleWorkflow.rb
@@ -65,6 +65,7 @@ files:
65
65
  - test/exec/tc_exec.rb
66
66
  - test/speed/tc_speed1.rb
67
67
  - test/speed/tc_speed2.rb
68
+ - test/test
68
69
  - test/wfp_adv_branching/tc_generalizedjoin.rb
69
70
  - test/wfp_adv_branching/tc_generalsynchronizingmerge.rb
70
71
  - test/wfp_adv_branching/tc_localsynchronizingmerge.rb
@@ -93,7 +94,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
93
94
  requirements:
94
95
  - - ">="
95
96
  - !ruby/object:Gem::Version
96
- version: 2.3.0
97
+ version: 2.6.0
97
98
  required_rubygems_version: !ruby/object:Gem::Requirement
98
99
  requirements:
99
100
  - - ">="
@@ -103,9 +104,10 @@ requirements: []
103
104
  rubygems_version: 3.1.2
104
105
  signing_key:
105
106
  specification_version: 4
106
- summary: Preliminary release of the Workflow Execution Engine Library (WEEL)
107
+ summary: Workflow Execution Engine Library (WEEL)
107
108
  test_files:
108
109
  - test/TestHandlerWrapper.rb
110
+ - test/test
109
111
  - test/ContinueTest.rb
110
112
  - test/TestWorkflow.rb
111
113
  - test/TestMixin.rb
data/README DELETED
@@ -1,4 +0,0 @@
1
- All code in this package is provided under the LGPL-3 license.
2
- Please read the file COPYING.
3
-
4
- Tested for MRI >= 1.9.3