weel 1.99.6 → 1.99.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Changelog CHANGED
@@ -1,8 +1,12 @@
1
- 1.2.x
1
+ 1.99.x
2
2
  -----
3
3
 
4
- Ruby >= 1.9.3 only, use Queue instead of Threads and Mutexes of Weel::Continue
5
- LGPL-3 to achive Aapache 2 compatibility
4
+ * Ruby >= 1.9.3 only, use Queue instead of Threads and Mutexes of Weel::Continue
5
+ * LGPL-3 to achive Aapache 2 compatibility
6
+ * Raise Weel::Signal::Again in HandlerWrapper, to trigger Manipulation and then
7
+ redo the activity. HandlerWrapper is not discarded inbetween, so it is possible
8
+ to continue receiving multiple callbacks. Basically sequential multi instance
9
+ task.
6
10
 
7
11
  1.1.x
8
12
  -----
@@ -69,6 +69,7 @@ class WEEL
69
69
  class Stop < Exception; end
70
70
  class Proceed < Exception; end
71
71
  class NoLongerNecessary < Exception; end
72
+ class Again < Exception; end
72
73
  end # }}}
73
74
 
74
75
  class ReadStructure # {{{
@@ -243,6 +244,9 @@ class WEEL
243
244
  def continue
244
245
  @q.push nil
245
246
  end
247
+ def clear
248
+ @q.clear
249
+ end
246
250
  def wait
247
251
  @q.deq
248
252
  end
@@ -616,40 +620,48 @@ class WEEL
616
620
  raise Signal::Stop unless handlerwrapper.vote_sync_before(params)
617
621
 
618
622
  passthrough = @__weel_search_positions[position] ? @__weel_search_positions[position].passthrough : nil
619
- # handshake call and wait until it finished
620
- handlerwrapper.activity_handle passthrough, params
621
- Thread.current[:continue].wait unless Thread.current[:nolongernecessary] || self.__weel_state == :stopping || self.__weel_state == :stopped
623
+ begin
624
+ # with loop if catch Signal::Again
625
+ begin
626
+ # handshake call and wait until it finished
627
+ handlerwrapper.activity_handle passthrough, params
628
+ Thread.current[:continue].wait unless Thread.current[:nolongernecessary] || self.__weel_state == :stopping || self.__weel_state == :stopped
629
+ again = false
630
+ rescue Signal::Again
631
+ again = true
632
+ end
622
633
 
623
- if Thread.current[:nolongernecessary]
624
- handlerwrapper.activity_no_longer_necessary
625
- raise Signal::NoLongerNecessary
626
- end
627
- if self.__weel_state == :stopping
628
- handlerwrapper.activity_stop
629
- wp.passthrough = handlerwrapper.activity_passthrough_value
630
- end
634
+ if Thread.current[:nolongernecessary]
635
+ handlerwrapper.activity_no_longer_necessary
636
+ raise Signal::NoLongerNecessary
637
+ end
638
+ if self.__weel_state == :stopping
639
+ handlerwrapper.activity_stop
640
+ wp.passthrough = handlerwrapper.activity_passthrough_value
641
+ end
631
642
 
632
- if wp.passthrough.nil? && (code.is_a?(Proc) || code.is_a?(String))
633
- handlerwrapper.inform_activity_manipulate
634
- status = handlerwrapper.activity_result_status
635
- if code.is_a?(Proc)
636
- mr = ManipulateStructure.new(@__weel_data,@__weel_endpoints,@__weel_status)
637
- case code.arity
638
- when 1; mr.instance_exec(handlerwrapper.activity_result_value,&code)
639
- when 2; mr.instance_exec(handlerwrapper.activity_result_value,(status.is_a?(Status)?status:nil),&code)
640
- else
641
- mr.instance_eval(&code)
642
- end
643
- elsif code.is_a?(String)
644
- mr = ManipulateStructure.new(@__weel_data,@__weel_endpoints,@__weel_status)
645
- handlerwrapper.manipulate(mr,code,handlerwrapper.activity_result_value,(status.is_a?(Status)?status:nil))
643
+ if wp.passthrough.nil? && (code.is_a?(Proc) || code.is_a?(String))
644
+ handlerwrapper.inform_activity_manipulate
645
+ status = handlerwrapper.activity_result_status
646
+ if code.is_a?(Proc)
647
+ mr = ManipulateStructure.new(@__weel_data,@__weel_endpoints,@__weel_status)
648
+ case code.arity
649
+ when 1; mr.instance_exec(handlerwrapper.activity_result_value,&code)
650
+ when 2; mr.instance_exec(handlerwrapper.activity_result_value,(status.is_a?(Status)?status:nil),&code)
651
+ else
652
+ mr.instance_eval(&code)
653
+ end
654
+ elsif code.is_a?(String)
655
+ mr = ManipulateStructure.new(@__weel_data,@__weel_endpoints,@__weel_status)
656
+ handlerwrapper.manipulate(mr,code,handlerwrapper.activity_result_value,(status.is_a?(Status)?status:nil))
657
+ end
658
+ handlerwrapper.inform_manipulate_change(
659
+ (mr.changed_status ? @__weel_status : nil),
660
+ (mr.changed_data.any? ? mr.changed_data.uniq : nil),
661
+ (mr.changed_endpoints.any? ? mr.changed_endpoints.uniq : nil)
662
+ )
646
663
  end
647
- handlerwrapper.inform_manipulate_change(
648
- (mr.changed_status ? @__weel_status : nil),
649
- (mr.changed_data.any? ? mr.changed_data.uniq : nil),
650
- (mr.changed_endpoints.any? ? mr.changed_endpoints.uniq : nil)
651
- )
652
- end
664
+ end while wp.passthrough.nil? && again
653
665
  if wp.passthrough.nil?
654
666
  handlerwrapper.inform_activity_done
655
667
  wp.detail = :after
@@ -672,6 +684,8 @@ class WEEL
672
684
  rescue => err
673
685
  handlerwrapper.inform_activity_failed err
674
686
  self.__weel_state = :stopping
687
+ ensure
688
+ Thread.current[:continue].clear if Thread.current[:continue] && Thread.current[:continue].is_a?(Continue)
675
689
  end
676
690
  end # }}}
677
691
 
@@ -0,0 +1,7 @@
1
+ basic ... Basic WEEL tests
2
+ complex ... Complex WEEL tests
3
+ exec ... Different Activity types
4
+ wfp_basic ... Basic Van der Aalst WF patterns
5
+ wfp_iteration ... Iteration related Van der Aalst WF patterns
6
+ wfp_state_based ... State Based Van der Aalst WF patterns
7
+ wfp_adv_branching ... Advanced Branching Van der Aalst WF patterns
@@ -16,6 +16,15 @@ class TestHandlerWrapper < WEEL::HandlerWrapperBase
16
16
  if @__myhandler_endpoint == 'stop it'
17
17
  raise WEEL::Signal::Stop
18
18
  end
19
+ if @__myhandler_endpoint == 'again'
20
+ @__myhandler_returnValue = parameters.has_key?(:result) ? parameters[:result] : 'Handler_Dummy_Result'
21
+ if parameters[:call].call
22
+ raise WEEL::Signal::Again
23
+ else
24
+ @__myhandler_continue.continue
25
+ end
26
+ return
27
+ end
19
28
  if parameters[:call]
20
29
  @t = Thread.new do
21
30
  parameters[:call].call
@@ -7,6 +7,7 @@ class TestWorkflow < WEEL
7
7
 
8
8
  endpoint :endpoint1 => 'http://www.heise.de'
9
9
  endpoint :stop => 'stop it'
10
+ endpoint :again => 'again'
10
11
  data :x => 'begin_'
11
12
 
12
13
  control flow do
@@ -33,7 +33,7 @@ class TestEndpoint < Test::Unit::TestCase
33
33
  @wf.endpoints[:endpoint1]="http://www.test2.com" # asure that ep1 has original value
34
34
  eps = @wf.endpoints
35
35
  assert(eps.is_a?(Hash), "Endpoints should result a Hash but returns a #{eps.class}")
36
- assert(eps.size == 3, "Endpoints should have two entries: #{eps.inspect}")
36
+ assert(eps.size == 4, "Endpoints should have two entries: #{eps.inspect}")
37
37
  assert(eps[:endpoint1] == "http://www.test2.com", "Endpoint 1 has wrong value or does not exist: #{eps.inspect}")
38
38
  assert(eps[:endpoint2] == "http://www.test.at", "Endpoint 2 has wrong value or does not exist: #{eps.inspect}")
39
39
  end
@@ -0,0 +1,20 @@
1
+ require 'test/unit'
2
+ require File.expand_path(::File.dirname(__FILE__) + '/../TestWorkflow')
3
+
4
+ class TestChoose < Test::Unit::TestCase
5
+ include TestMixin
6
+
7
+ def test_again
8
+ @wf.data[:a] = 0
9
+ @wf.description do
10
+ call :a_1, :again, :call => Proc.new{data.a < 2} do
11
+ data.a += 1
12
+ end
13
+ end
14
+ @wf.start.join
15
+ wf_assert("CALL a_1")
16
+ wf_sassert("|running|Ca_1Ma_1Ca_1Ma_1Ca_1Ma_1Da_1|finished|")
17
+ assert(@wf.data[:a] == 3)
18
+ end
19
+
20
+ end
@@ -0,0 +1,25 @@
1
+ require 'test/unit'
2
+ require File.expand_path(::File.dirname(__FILE__) + '/../TestWorkflow')
3
+
4
+ class TestChoose < Test::Unit::TestCase
5
+ include TestMixin
6
+
7
+ def test_exec
8
+ @wf.data[:a] = 0
9
+ @wf.data[:b] = 0
10
+ @wf.description do
11
+ manipulate :a_1, <<-end
12
+ data.a = 1
13
+ end
14
+ call :a_2, :endpoint1, <<-end
15
+ data.b = 1
16
+ end
17
+ end
18
+ @wf.start.join
19
+ wf_assert("MANIPULATE a_1")
20
+ wf_assert("CALL a_2")
21
+ assert(@wf.data[:a] == 1)
22
+ assert(@wf.data[:b] == 1)
23
+ end
24
+
25
+ end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "weel"
3
- s.version = "1.99.6"
3
+ s.version = "1.99.7"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.license = "LGPL-3"
6
6
  s.summary = "Preliminary release of the Workflow Execution Engine Library (WEEL)"
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.6
4
+ version: 1.99.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-10-14 00:00:00.000000000 Z
13
+ date: 2014-04-02 00:00:00.000000000 Z
14
14
  dependencies: []
15
15
  description: see http://cpee.org
16
16
  email: juergen.mangler@gmail.com
@@ -19,9 +19,9 @@ extensions: []
19
19
  extra_rdoc_files:
20
20
  - README
21
21
  files:
22
+ - example/SimpleHandlerWrapper.rb
22
23
  - example/SimpleWorkflow.rb
23
24
  - example/runme.rb
24
- - example/SimpleHandlerWrapper.rb
25
25
  - lib/weel.rb
26
26
  - COPYING
27
27
  - Changelog
@@ -31,37 +31,40 @@ files:
31
31
  - weel.gemspec
32
32
  - README
33
33
  - AUTHORS
34
- - test/TestHandlerWrapper.rb
35
34
  - test/SimHandlerWrapper.rb
36
- - test/ContinueTest.rb
37
35
  - test/TestMixin.rb
36
+ - test/TestHandlerWrapper.rb
37
+ - test/ContinueTest.rb
38
+ - test/README
38
39
  - test/TestWorkflow.rb
39
- - test/complex/tc_parallel_stop.rb
40
- - test/complex/tc_generalsynchonizingmerge_loopsearch.rb
41
- - test/wfp_state_based/tc_interleavedparallelrouting.rb
42
- - test/wfp_state_based/tc_deferredchoice.rb
43
- - test/wfp_basic/tc_parallelsplit_synchronization.rb
44
- - test/wfp_basic/tc_sequence.rb
45
- - test/wfp_basic/tc_exclusivechoice_simplemerge.rb
46
- - test/basic/tc_data.rb
47
- - test/basic/tc_codereplace.rb
48
- - test/basic/tc_state.rb
49
- - test/basic/tc_wf_control.rb
50
- - test/basic/tc_choose.rb
51
- - test/basic/tc_search.rb
52
- - test/basic/tc_handler.rb
53
- - test/basic/tc_endpoint.rb
54
- - test/basic/tc_parallel.rb
55
- - test/wfp_iteration/tc_structuredloop.rb
56
40
  - test/wfp_adv_branching/tc_threadsplit.rb
57
- - test/wfp_adv_branching/tc_generalizedjoin.rb
58
- - test/wfp_adv_branching/tc_structured_partial_join.rb
41
+ - test/wfp_adv_branching/tc_structured_discriminator.rb
59
42
  - test/wfp_adv_branching/tc_multichoice_structuredsynchronizingmerge.rb
60
- - test/wfp_adv_branching/tc_threadmerge.rb
43
+ - test/wfp_adv_branching/tc_multimerge.rb
61
44
  - test/wfp_adv_branching/tc_generalsynchronizingmerge.rb
62
45
  - test/wfp_adv_branching/tc_localsynchronizingmerge.rb
63
- - test/wfp_adv_branching/tc_structured_discriminator.rb
64
- - test/wfp_adv_branching/tc_multimerge.rb
46
+ - test/wfp_adv_branching/tc_generalizedjoin.rb
47
+ - test/wfp_adv_branching/tc_threadmerge.rb
48
+ - test/wfp_adv_branching/tc_structured_partial_join.rb
49
+ - test/wfp_iteration/tc_structuredloop.rb
50
+ - test/basic/tc_codereplace.rb
51
+ - test/basic/tc_endpoint.rb
52
+ - test/basic/tc_handler.rb
53
+ - test/basic/tc_parallel.rb
54
+ - test/basic/tc_search.rb
55
+ - test/basic/tc_state.rb
56
+ - test/basic/tc_choose.rb
57
+ - test/basic/tc_data.rb
58
+ - test/basic/tc_wf_control.rb
59
+ - test/exec/tc_exec.rb
60
+ - test/exec/tc_again.rb
61
+ - test/wfp_basic/tc_sequence.rb
62
+ - test/wfp_basic/tc_parallelsplit_synchronization.rb
63
+ - test/wfp_basic/tc_exclusivechoice_simplemerge.rb
64
+ - test/wfp_state_based/tc_interleavedparallelrouting.rb
65
+ - test/wfp_state_based/tc_deferredchoice.rb
66
+ - test/complex/tc_generalsynchonizingmerge_loopsearch.rb
67
+ - test/complex/tc_parallel_stop.rb
65
68
  homepage: http://cpee.org/
66
69
  licenses:
67
70
  - LGPL-3
@@ -88,34 +91,37 @@ signing_key:
88
91
  specification_version: 3
89
92
  summary: Preliminary release of the Workflow Execution Engine Library (WEEL)
90
93
  test_files:
91
- - test/TestHandlerWrapper.rb
92
94
  - test/SimHandlerWrapper.rb
93
- - test/ContinueTest.rb
94
95
  - test/TestMixin.rb
96
+ - test/TestHandlerWrapper.rb
97
+ - test/ContinueTest.rb
98
+ - test/README
95
99
  - test/TestWorkflow.rb
96
- - test/complex/tc_parallel_stop.rb
97
- - test/complex/tc_generalsynchonizingmerge_loopsearch.rb
98
- - test/wfp_state_based/tc_interleavedparallelrouting.rb
99
- - test/wfp_state_based/tc_deferredchoice.rb
100
- - test/wfp_basic/tc_parallelsplit_synchronization.rb
101
- - test/wfp_basic/tc_sequence.rb
102
- - test/wfp_basic/tc_exclusivechoice_simplemerge.rb
103
- - test/basic/tc_data.rb
104
- - test/basic/tc_codereplace.rb
105
- - test/basic/tc_state.rb
106
- - test/basic/tc_wf_control.rb
107
- - test/basic/tc_choose.rb
108
- - test/basic/tc_search.rb
109
- - test/basic/tc_handler.rb
110
- - test/basic/tc_endpoint.rb
111
- - test/basic/tc_parallel.rb
112
- - test/wfp_iteration/tc_structuredloop.rb
113
100
  - test/wfp_adv_branching/tc_threadsplit.rb
114
- - test/wfp_adv_branching/tc_generalizedjoin.rb
115
- - test/wfp_adv_branching/tc_structured_partial_join.rb
101
+ - test/wfp_adv_branching/tc_structured_discriminator.rb
116
102
  - test/wfp_adv_branching/tc_multichoice_structuredsynchronizingmerge.rb
117
- - test/wfp_adv_branching/tc_threadmerge.rb
103
+ - test/wfp_adv_branching/tc_multimerge.rb
118
104
  - test/wfp_adv_branching/tc_generalsynchronizingmerge.rb
119
105
  - test/wfp_adv_branching/tc_localsynchronizingmerge.rb
120
- - test/wfp_adv_branching/tc_structured_discriminator.rb
121
- - test/wfp_adv_branching/tc_multimerge.rb
106
+ - test/wfp_adv_branching/tc_generalizedjoin.rb
107
+ - test/wfp_adv_branching/tc_threadmerge.rb
108
+ - test/wfp_adv_branching/tc_structured_partial_join.rb
109
+ - test/wfp_iteration/tc_structuredloop.rb
110
+ - test/basic/tc_codereplace.rb
111
+ - test/basic/tc_endpoint.rb
112
+ - test/basic/tc_handler.rb
113
+ - test/basic/tc_parallel.rb
114
+ - test/basic/tc_search.rb
115
+ - test/basic/tc_state.rb
116
+ - test/basic/tc_choose.rb
117
+ - test/basic/tc_data.rb
118
+ - test/basic/tc_wf_control.rb
119
+ - test/exec/tc_exec.rb
120
+ - test/exec/tc_again.rb
121
+ - test/wfp_basic/tc_sequence.rb
122
+ - test/wfp_basic/tc_parallelsplit_synchronization.rb
123
+ - test/wfp_basic/tc_exclusivechoice_simplemerge.rb
124
+ - test/wfp_state_based/tc_interleavedparallelrouting.rb
125
+ - test/wfp_state_based/tc_deferredchoice.rb
126
+ - test/complex/tc_generalsynchonizingmerge_loopsearch.rb
127
+ - test/complex/tc_parallel_stop.rb