weel 1.99.56 → 1.99.61
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/weel.rb +70 -51
- data/weel.gemspec +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c55c3d411a1eab0c4cd80b803dbbcf358fbafb63
|
4
|
+
data.tar.gz: 313ba40f324c648a521f8909afac4ad63406e294
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cdc858221117b9535568b76d19e9c710007cfa687b6b9c0f12b12169b0e8e4861281dc6bfa4afe64e0a1574d7c7c4b0f6f7997384b33411eb3ccf977921e4fe2
|
7
|
+
data.tar.gz: 80c42fca246256ebc96c9a2533087ae1e72cdcefdb96ff06b872a78c71fabb9035ac2399c1b514146e69863b76110ac4863edb8d5a1284610333df517e60657c
|
data/lib/weel.rb
CHANGED
@@ -56,7 +56,6 @@ class WEEL
|
|
56
56
|
class SkipManipulate < Exception; end
|
57
57
|
class StopSkipManipulate < Exception; end
|
58
58
|
class Stop < Exception; end
|
59
|
-
class StopAfter < Exception; end
|
60
59
|
class Proceed < Exception; end
|
61
60
|
class NoLongerNecessary < Exception; end
|
62
61
|
class Again < Exception; end
|
@@ -212,6 +211,7 @@ class WEEL
|
|
212
211
|
def initialize(arguments,endpoint=nil,position=nil,continue=nil); end
|
213
212
|
|
214
213
|
def activity_handle(passthrough, parameters); end
|
214
|
+
def activity_manipulate_handle(parameters); end
|
215
215
|
|
216
216
|
def activity_result_value; end
|
217
217
|
def activity_result_status; end
|
@@ -335,15 +335,20 @@ class WEEL
|
|
335
335
|
def call(position, endpoint, parameters: {}, finalize: nil, update: nil, &finalizeblk)
|
336
336
|
__weel_activity(position,:call,endpoint,parameters,finalize||finalizeblk,update)
|
337
337
|
end
|
338
|
-
|
339
|
-
|
338
|
+
# when two params, second param always script
|
339
|
+
# when block and two params, parameters stays
|
340
|
+
def manipulate(position, parameters=nil, script=nil, &scriptblk)
|
341
|
+
if scriptblk.nil? && script.nil? && !parameters.nil?
|
342
|
+
script, parameters = parameters, nil
|
343
|
+
end
|
344
|
+
__weel_activity(position,:manipulate,nil,parameters||{},script||scriptblk)
|
340
345
|
end
|
341
346
|
|
342
347
|
# Parallel DSL-Construct
|
343
348
|
# Defines Workflow paths that can be executed parallel.
|
344
349
|
# May contain multiple branches (parallel_branch)
|
345
350
|
def parallel(type=nil)# {{{
|
346
|
-
return if self.__weel_state == :stopping || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
|
351
|
+
return if self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
|
347
352
|
|
348
353
|
Thread.current[:branches] = []
|
349
354
|
Thread.current[:branch_finished_count] = 0
|
@@ -372,7 +377,7 @@ class WEEL
|
|
372
377
|
|
373
378
|
__weel_sim_stop(:parallel,hw,pos) if __weel_sim
|
374
379
|
|
375
|
-
unless self.__weel_state == :stopping || self.__weel_state == :stopped
|
380
|
+
unless self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped
|
376
381
|
# first set all to no_longer_neccessary
|
377
382
|
Thread.current[:branches].each do |thread|
|
378
383
|
if thread.alive?
|
@@ -389,7 +394,7 @@ class WEEL
|
|
389
394
|
|
390
395
|
# Defines a branch of a parallel-Construct
|
391
396
|
def parallel_branch(*vars)# {{{
|
392
|
-
return if self.__weel_state == :stopping || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
|
397
|
+
return if self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
|
393
398
|
branch_parent = Thread.current
|
394
399
|
|
395
400
|
if __weel_sim
|
@@ -428,11 +433,11 @@ class WEEL
|
|
428
433
|
branch_parent[:mutex].synchronize do
|
429
434
|
Thread.current[:branch_status] = true
|
430
435
|
branch_parent[:branch_finished_count] += 1
|
431
|
-
if branch_parent[:branch_finished_count] == branch_parent[:branch_wait_count] && self.__weel_state != :stopping
|
436
|
+
if branch_parent[:branch_finished_count] == branch_parent[:branch_wait_count] && self.__weel_state != :stopping && self.__weel_state != :finishing
|
432
437
|
branch_parent[:branch_event].continue
|
433
438
|
end
|
434
439
|
end
|
435
|
-
if self.__weel_state != :stopping && self.__weel_state != :stopped
|
440
|
+
if self.__weel_state != :stopping && self.__weel_state != :stopped && self.__weel_state != :finishing
|
436
441
|
if Thread.current[:branch_position]
|
437
442
|
@__weel_positions.delete Thread.current[:branch_position]
|
438
443
|
begin
|
@@ -450,7 +455,7 @@ class WEEL
|
|
450
455
|
# Defines a choice in the Workflow path.
|
451
456
|
# May contain multiple execution alternatives
|
452
457
|
def choose(mode=:inclusive) # {{{
|
453
|
-
return if self.__weel_state == :stopping || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
|
458
|
+
return if self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
|
454
459
|
Thread.current[:alternative_executed] ||= []
|
455
460
|
Thread.current[:alternative_mode] ||= []
|
456
461
|
Thread.current[:alternative_executed] << false
|
@@ -467,7 +472,7 @@ class WEEL
|
|
467
472
|
# Block is executed if condition == true or
|
468
473
|
# searchmode is active (to find the starting position)
|
469
474
|
def alternative(condition,args={})# {{{
|
470
|
-
return if self.__weel_state == :stopping || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
|
475
|
+
return if self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
|
471
476
|
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
|
472
477
|
Thread.current[:mutex] ||= Mutex.new
|
473
478
|
Thread.current[:mutex].synchronize do
|
@@ -481,7 +486,7 @@ class WEEL
|
|
481
486
|
__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
|
482
487
|
end # }}}
|
483
488
|
def otherwise(args={}) # {{{
|
484
|
-
return if self.__weel_state == :stopping || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
|
489
|
+
return if self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
|
485
490
|
hw, pos = __weel_sim_start(:otherwise,args.merge(:mode => Thread.current[:alternative_mode].last)) if __weel_sim
|
486
491
|
__weel_protect_yield(&Proc.new) if __weel_is_in_search_mode || __weel_sim || !Thread.current[:alternative_executed].last
|
487
492
|
__weel_sim_stop(:otherwise,hw,pos,args.merge(:mode => Thread.current[:alternative_mode].last)) if __weel_sim
|
@@ -506,7 +511,7 @@ class WEEL
|
|
506
511
|
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)
|
507
512
|
raise "condition must be called pre_test{} or post_test{}"
|
508
513
|
end
|
509
|
-
return if self.__weel_state == :stopping || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
|
514
|
+
return if self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
|
510
515
|
if __weel_is_in_search_mode
|
511
516
|
catch :escape do
|
512
517
|
__weel_protect_yield(&Proc.new)
|
@@ -525,13 +530,13 @@ class WEEL
|
|
525
530
|
catch :escape do
|
526
531
|
case condition[1]
|
527
532
|
when :pre_test
|
528
|
-
while __weel_eval_condition(condition[0]) && self.__weel_state != :stopping && self.__weel_state != :stopped
|
533
|
+
while __weel_eval_condition(condition[0]) && self.__weel_state != :stopping && self.__weel_state != :stopped && self.__weel_state != :finishing
|
529
534
|
__weel_protect_yield(&Proc.new)
|
530
535
|
end
|
531
536
|
when :post_test
|
532
537
|
begin
|
533
538
|
__weel_protect_yield(&Proc.new)
|
534
|
-
end while __weel_eval_condition(condition[0]) && self.__weel_state != :stopping && self.__weel_state != :stopped
|
539
|
+
end while __weel_eval_condition(condition[0]) && self.__weel_state != :stopping && self.__weel_state != :stopped && self.__weel_state != :finishing
|
535
540
|
end
|
536
541
|
end
|
537
542
|
end # }}}
|
@@ -546,7 +551,20 @@ class WEEL
|
|
546
551
|
[code || blk, :post_test]
|
547
552
|
end # }}}
|
548
553
|
|
549
|
-
def escape
|
554
|
+
def escape
|
555
|
+
return if __weel_is_in_search_mode
|
556
|
+
throw :escape
|
557
|
+
end
|
558
|
+
def terminate
|
559
|
+
return if __weel_is_in_search_mode
|
560
|
+
self.__weel_state = :finishing
|
561
|
+
end
|
562
|
+
def stop(position)
|
563
|
+
searchmode = __weel_is_in_search_mode(position)
|
564
|
+
return if searchmode
|
565
|
+
__weel_progress searchmode, position, true
|
566
|
+
self.__weel_state = :stopping
|
567
|
+
end
|
550
568
|
|
551
569
|
def status # {{{
|
552
570
|
@__weel_status
|
@@ -589,12 +607,39 @@ class WEEL
|
|
589
607
|
end
|
590
608
|
end
|
591
609
|
|
610
|
+
def __weel_progress(searchmode, position, skip=false)
|
611
|
+
ipc = {}
|
612
|
+
if searchmode == :after
|
613
|
+
wp = WEEL::Position.new(position, :after, nil)
|
614
|
+
ipc[:after] = [wp.position]
|
615
|
+
else
|
616
|
+
if Thread.current[:branch_parent] && Thread.current[:branch_parent][:branch_position]
|
617
|
+
@__weel_positions.delete Thread.current[:branch_parent][:branch_position]
|
618
|
+
ipc[:unmark] ||= []
|
619
|
+
ipc[:unmark] << Thread.current[:branch_parent][:branch_position].position rescue nil
|
620
|
+
Thread.current[:branch_parent][:branch_position] = nil
|
621
|
+
end
|
622
|
+
if Thread.current[:branch_position]
|
623
|
+
@__weel_positions.delete Thread.current[:branch_position]
|
624
|
+
ipc[:unmark] ||= []
|
625
|
+
ipc[:unmark] << Thread.current[:branch_position].position rescue nil
|
626
|
+
end
|
627
|
+
wp = WEEL::Position.new(position, skip ? :after : :at, nil)
|
628
|
+
ipc[skip ? :after : :at] = [wp.position]
|
629
|
+
end
|
630
|
+
@__weel_positions << wp
|
631
|
+
Thread.current[:branch_position] = wp
|
632
|
+
|
633
|
+
@__weel_handlerwrapper::inform_position_change @__weel_handlerwrapper_args, ipc
|
634
|
+
wp
|
635
|
+
end
|
636
|
+
|
592
637
|
def __weel_activity(position, type, endpoints, parameters, finalize, update=nil)# {{{
|
593
638
|
position = __weel_position_test position
|
594
639
|
begin
|
595
640
|
searchmode = __weel_is_in_search_mode(position)
|
596
641
|
return if searchmode == true
|
597
|
-
return if self.__weel_state == :stopping || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
|
642
|
+
return if self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
|
598
643
|
|
599
644
|
Thread.current[:continue] = Continue.new
|
600
645
|
handlerwrapper = @__weel_handlerwrapper.new @__weel_handlerwrapper_args, endpoints.is_a?(Array) ? endpoints.map{ |ep| @__weel_endpoints[ep] }.compact : @__weel_endpoints[endpoints], position, Thread.current[:continue]
|
@@ -604,29 +649,7 @@ class WEEL
|
|
604
649
|
return
|
605
650
|
end
|
606
651
|
|
607
|
-
|
608
|
-
if searchmode == :after
|
609
|
-
wp = WEEL::Position.new(position, :after, nil)
|
610
|
-
ipc[:after] = [wp.position]
|
611
|
-
else
|
612
|
-
if Thread.current[:branch_parent] && Thread.current[:branch_parent][:branch_position]
|
613
|
-
@__weel_positions.delete Thread.current[:branch_parent][:branch_position]
|
614
|
-
ipc[:unmark] ||= []
|
615
|
-
ipc[:unmark] << Thread.current[:branch_parent][:branch_position].position rescue nil
|
616
|
-
Thread.current[:branch_parent][:branch_position] = nil
|
617
|
-
end
|
618
|
-
if Thread.current[:branch_position]
|
619
|
-
@__weel_positions.delete Thread.current[:branch_position]
|
620
|
-
ipc[:unmark] ||= []
|
621
|
-
ipc[:unmark] << Thread.current[:branch_position].position rescue nil
|
622
|
-
end
|
623
|
-
wp = WEEL::Position.new(position, :at, nil)
|
624
|
-
ipc[:at] = [wp.position]
|
625
|
-
end
|
626
|
-
@__weel_positions << wp
|
627
|
-
Thread.current[:branch_position] = wp
|
628
|
-
|
629
|
-
@__weel_handlerwrapper::inform_position_change @__weel_handlerwrapper_args, ipc
|
652
|
+
wp = __weel_progress searchmode, position
|
630
653
|
|
631
654
|
# searchmode position is after, jump directly to vote_sync_after
|
632
655
|
raise Signal::Proceed if searchmode == :after
|
@@ -634,9 +657,10 @@ class WEEL
|
|
634
657
|
case type
|
635
658
|
when :manipulate
|
636
659
|
raise Signal::Stop unless handlerwrapper.vote_sync_before
|
637
|
-
raise Signal::Skip if self.__weel_state == :stopping
|
660
|
+
raise Signal::Skip if self.__weel_state == :stopping || self.__weel_state == :finishing
|
638
661
|
|
639
662
|
if finalize.is_a?(Proc) || finalize.is_a?(String)
|
663
|
+
handlerwrapper.activity_manipulate_handle(parameters)
|
640
664
|
handlerwrapper.inform_activity_manipulate
|
641
665
|
if finalize.is_a?(Proc)
|
642
666
|
mr = ManipulateStructure.new(@__weel_data,@__weel_endpoints,@__weel_status)
|
@@ -679,7 +703,7 @@ class WEEL
|
|
679
703
|
raise("invalid parameters")
|
680
704
|
end
|
681
705
|
raise Signal::Stop unless handlerwrapper.vote_sync_before(params)
|
682
|
-
raise Signal::Skip if self.__weel_state == :stopping
|
706
|
+
raise Signal::Skip if self.__weel_state == :stopping || self.__weel_state == :finishing
|
683
707
|
|
684
708
|
passthrough = @__weel_search_positions[position] ? @__weel_search_positions[position].passthrough : nil
|
685
709
|
handlerwrapper.activity_handle passthrough, params
|
@@ -687,14 +711,14 @@ class WEEL
|
|
687
711
|
# with loop if catching Signal::Again
|
688
712
|
# handshake call and wait until it finished
|
689
713
|
waitingresult = nil
|
690
|
-
waitingresult = Thread.current[:continue].wait unless Thread.current[:nolongernecessary] || self.__weel_state == :stopping || self.__weel_state == :stopped
|
714
|
+
waitingresult = Thread.current[:continue].wait unless Thread.current[:nolongernecessary] || self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped
|
691
715
|
raise waitingresult[1] if !waitingresult.nil? && waitingresult.is_a?(Array) && waitingresult.length == 2 && waitingresult[0] == WEEL::Signal::Error
|
692
716
|
|
693
717
|
if Thread.current[:nolongernecessary]
|
694
718
|
handlerwrapper.activity_no_longer_necessary
|
695
719
|
raise Signal::NoLongerNecessary
|
696
720
|
end
|
697
|
-
if self.__weel_state == :stopping
|
721
|
+
if self.__weel_state == :stopping || self.__weel_state == :finishing
|
698
722
|
handlerwrapper.activity_stop
|
699
723
|
wp.passthrough = handlerwrapper.activity_passthrough_value
|
700
724
|
raise Signal::Proceed
|
@@ -732,13 +756,8 @@ class WEEL
|
|
732
756
|
end
|
733
757
|
end
|
734
758
|
raise Signal::Proceed
|
735
|
-
rescue Signal::StopAfter
|
736
|
-
handlerwrapper.inform_activity_done
|
737
|
-
wp.detail = :after
|
738
|
-
@__weel_handlerwrapper::inform_position_change @__weel_handlerwrapper_args, :after => [wp.position]
|
739
|
-
self.__weel_state = :stopping
|
740
759
|
rescue Signal::SkipManipulate, Signal::Proceed
|
741
|
-
if self.__weel_state != :stopping && !handlerwrapper.vote_sync_after
|
760
|
+
if self.__weel_state != :stopping && self.__weel_state != :finishing && !handlerwrapper.vote_sync_after
|
742
761
|
self.__weel_state = :stopping
|
743
762
|
wp.detail = :unmark
|
744
763
|
end
|
@@ -853,7 +872,7 @@ class WEEL
|
|
853
872
|
@__weel_positions = Array.new if newState == :running
|
854
873
|
@__weel_state = newState
|
855
874
|
|
856
|
-
if newState == :stopping
|
875
|
+
if newState == :stopping || newState == :finishing
|
857
876
|
__weel_recursive_continue(@__weel_main)
|
858
877
|
end
|
859
878
|
|
@@ -966,7 +985,7 @@ public
|
|
966
985
|
@dslr.__weel_state = :stopping
|
967
986
|
@dslr.__weel_handlerwrapper::inform_syntax_error(@dslr.__weel_handlerwrapper_args,Exception.new(err.message),code)
|
968
987
|
end
|
969
|
-
if @dslr.__weel_state == :running
|
988
|
+
if @dslr.__weel_state == :running || @dslr.__weel_state == :finishing
|
970
989
|
@dslr.__weel_state = :finished
|
971
990
|
ipc = { :unmark => [] }
|
972
991
|
@dslr.__weel_positions.each{ |wp| ipc[:unmark] << wp.position }
|
data/weel.gemspec
CHANGED
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.
|
4
|
+
version: 1.99.61
|
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: 2018-03-
|
12
|
+
date: 2018-03-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: test-unit
|