weel 1.99.75 → 1.99.76

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/weel.rb +65 -53
  3. data/weel.gemspec +1 -1
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 57fdb6df90a2944745d919718aaf93e04755b9a996f119c1144b8241da9bc09d
4
- data.tar.gz: f30673b37bb604dc635d37206792345ff4938465fe37d82d3b6d37857b141782
3
+ metadata.gz: 7cb0b00eea5a043d05689d6c2f57460f0852260d8041d5b4428ef5b012a54531
4
+ data.tar.gz: 64387529527bf0a0f110fdc5dfe0c25ac0189eefcc184a5cc8fa609ec3a93c59
5
5
  SHA512:
6
- metadata.gz: 9f9166ccd4fa394046d619c0b060ffd9d945992e28439e7321dc01a3309b24d431f89e37e1e0677fe109592f09b70079638508365c4ee0049755f24f4c8c9b7f
7
- data.tar.gz: 05a7b83e323f2b9e1912e01edf2bdd3137f76fb06a78b0e7929f358927be1ccf5ace519b62710764741324eb5f7d26f91dca23df68f1364e51c37b3a8d8c2d21
6
+ metadata.gz: 416b7ecfa75b3df501d738a392fe8fdc43531b7f0479f7a0d60ec30e0beddfe532985ef5edd77a40c3890f6ee86ae43663b7532c3b11da306f92cb3f26ed2e4e
7
+ data.tar.gz: adcd6e152b2a2405862c02312faae7799f84a9d9be953fc82f6b54763e5dd0b77ee2696266e59621d0618bf9395ef3ea9386d908faa581ecf1b59b6eb2caf1dc
@@ -16,29 +16,6 @@
16
16
 
17
17
  require 'thread'
18
18
 
19
- # OMG!111! deep cloning for ReadHashes
20
- class Object # {{{
21
- def deep_clone
22
- return @deep_cloning_obj if @deep_cloning
23
- @deep_cloning_obj = clone
24
- @deep_cloning_obj.instance_variables.each do |var|
25
- val = @deep_cloning_obj.instance_variable_get(var)
26
- begin
27
- @deep_cloning = true
28
- val = val.deep_clone
29
- rescue TypeError
30
- next
31
- ensure
32
- @deep_cloning = false
33
- end
34
- @deep_cloning_obj.instance_variable_set(var, val)
35
- end
36
- deep_cloning_obj = @deep_cloning_obj
37
- @deep_cloning_obj = nil
38
- deep_cloning_obj
39
- end
40
- end #}}}
41
-
42
19
  class WEEL
43
20
  def initialize(*args)# {{{
44
21
  @dslr = DSLRealization.new
@@ -60,27 +37,38 @@ class WEEL
60
37
  class NoLongerNecessary < Exception; end
61
38
  class Again < Exception; end
62
39
  class Error < Exception; end
40
+ class Salvage < Exception; end
63
41
  end # }}}
64
42
 
65
- class ReadStructure # {{{
66
- def initialize(data,endpoints)
67
- @__weel_data = data
68
- @__weel_endpoints = endpoints
69
- @changed_data = []
70
- @changed_endpoints = []
43
+ class ReadStructure # {{{
44
+ def initialize(data,endpoints)
45
+ @__weel_data = data.dup
46
+ @__weel_data.transform_values! do |v|
47
+ if 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
71
56
  end
57
+ @__weel_endpoints = endpoints.dup
58
+ @__weel_endpoints.transform_values!{ |v| v.dup }
59
+ end
72
60
 
73
- def data
74
- ReadHash.new(@__weel_data)
75
- end
76
- def endpoints
77
- ReadHash.new(@__weel_endpoints)
78
- end
79
- end # }}}
61
+ def data
62
+ ReadHash.new(@__weel_data)
63
+ end
64
+ def endpoints
65
+ ReadHash.new(@__weel_endpoints)
66
+ end
67
+ end # }}}
80
68
  class ManipulateStructure # {{{
81
69
  def initialize(data,endpoints,status)
82
70
  @__weel_data = data
83
- @__weel_data_orig = @__weel_data.transform_values{|val| Marshal.dump(val) }
71
+ @__weel_data_orig = @__weel_data.transform_values{|val| Marshal.dump(val) } rescue nil
84
72
  @__weel_endpoints = endpoints
85
73
  @__weel_endpoints_orig = @__weel_endpoints.transform_values{|val| Marshal.dump(val) }
86
74
  @__weel_status = status
@@ -93,7 +81,8 @@ class WEEL
93
81
 
94
82
  def changed_data
95
83
  @touched_data.each do |e|
96
- if Marshal.dump(@__weel_data[e]) != @__weel_data_orig[e]
84
+ td = Marshal.dump(@__weel_data[e]) rescue nil
85
+ if td != @__weel_data_orig[e]
97
86
  @changed_data << e
98
87
  end
99
88
  end
@@ -104,11 +93,11 @@ class WEEL
104
93
  end
105
94
 
106
95
  def original_data
107
- @__weel_data_orig.transform_values{|val| Marshal.load(val) }
96
+ @__weel_data_orig.transform_values{|val| Marshal.load(val) rescue nil }
108
97
  end
109
98
 
110
99
  def original_endpoints
111
- @__weel_endpoints_orig.transform_values{|val| Marshal.load(val) }
100
+ @__weel_endpoints_orig.transform_values{|val| Marshal.load(val) rescue nil }
112
101
  end
113
102
 
114
103
  def changed_status
@@ -197,15 +186,21 @@ class WEEL
197
186
  end
198
187
 
199
188
  def method_missing(name,*args)
200
- if args.empty? && @__weel_values.key?(name)
201
- if @__weel_sim
202
- "➤#{name}"
203
- else
189
+ if @__weel_sim
190
+ "➤#{name}"
191
+ else
192
+ if args.empty? && @__weel_values.key?(name)
204
193
  @__weel_values[name]
194
+ elsif name.to_s[-1..-1] == "=" && args.length == 1
195
+ temp = name.to_s[0..-2]
196
+ @__weel_values[temp.to_sym] = args[0]
197
+ elsif name.to_s == "[]=" && args.length == 2
198
+ @__weel_values[args[0]] = args[1]
199
+ elsif name.to_s == "[]" && args.length == 1
200
+ @__weel_values[args[0]]
201
+ else
202
+ nil
205
203
  end
206
- #TODO dont let user change stuff e.g. if return value is an array (deep clone and/or deep freeze it?)
207
- else
208
- nil
209
204
  end
210
205
  end
211
206
  end # }}}
@@ -219,6 +214,8 @@ class WEEL
219
214
 
220
215
  def initialize(arguments,endpoint=nil,position=nil,continue=nil); end
221
216
 
217
+ def prepare(readonly, endpoints, parameters); parameters; end
218
+
222
219
  def activity_handle(passthrough, parameters); end
223
220
  def activity_manipulate_handle(parameters); end
224
221
 
@@ -351,8 +348,8 @@ class WEEL
351
348
  # position: a unique identifier within the wf-description (may be used by the search to identify a starting point)
352
349
  # endpoint: (only with :call) ep of the service
353
350
  # parameters: (only with :call) service parameters
354
- def call(position, endpoint, parameters: {}, finalize: nil, update: nil, &finalizeblk) #{{{
355
- __weel_activity(position,:call,endpoint,parameters,finalize||finalizeblk,update)
351
+ def call(position, endpoint, parameters: {}, finalize: nil, update: nil, prepare: nil, salvage: nil, &finalizeblk) #{{{
352
+ __weel_activity(position,:call,endpoint,parameters,finalize||finalizeblk,update,prepare,salvage)
356
353
  end #}}}
357
354
  # when two params, second param always script
358
355
  # when block and two params, parameters stays
@@ -662,7 +659,7 @@ class WEEL
662
659
  wp
663
660
  end #}}}
664
661
 
665
- def __weel_activity(position, type, endpoints, parameters, finalize, update=nil)# {{{
662
+ def __weel_activity(position, type, endpoint, parameters, finalize=nil, update=nil, prepare=nil, salvage=nil)# {{{
666
663
  position = __weel_position_test position
667
664
  begin
668
665
  searchmode = __weel_is_in_search_mode(position)
@@ -670,10 +667,10 @@ class WEEL
670
667
  return if self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
671
668
 
672
669
  Thread.current[:continue] = Continue.new
673
- 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]
670
+ handlerwrapper = @__weel_handlerwrapper.new @__weel_handlerwrapper_args, position, Thread.current[:continue]
674
671
 
675
672
  if __weel_sim
676
- handlerwrapper.simulate(:activity,:none,@__weel_sim += 1,Thread.current[:branch_sim_pos],:position => position,:parameters => parameters,:endpoints => endpoints,:type => type,:finalize => finalize.is_a?(String) ? finalize : nil)
673
+ handlerwrapper.simulate(:activity,:none,@__weel_sim += 1,Thread.current[:branch_sim_pos],:position => position,:parameters => parameters,:endpoint => endpoint,:type => type,:finalize => finalize.is_a?(String) ? finalize : nil)
677
674
  return
678
675
  end
679
676
 
@@ -730,6 +727,15 @@ class WEEL
730
727
  else
731
728
  raise("invalid parameters")
732
729
  end
730
+ rs = ReadStructure.new(@__weel_data,@__weel_endpoints)
731
+ if prepare
732
+ if prepare.is_a?(Proc)
733
+ rs.instance_exec &prepare
734
+ elsif prepare.is_a?(String)
735
+ rs.instance_eval prepare
736
+ end
737
+ end
738
+ params = handlerwrapper.prepare(rs,endpoint,params)
733
739
  raise Signal::Stop unless handlerwrapper.vote_sync_before(params)
734
740
  raise Signal::Skip if self.__weel_state == :stopping || self.__weel_state == :finishing
735
741
 
@@ -762,7 +768,13 @@ class WEEL
762
768
  raise Signal::Proceed
763
769
  end
764
770
 
765
- code = waitingresult == Signal::Again ? update : finalize
771
+ code = if waitingresult == WEEL::Signal::Again
772
+ update
773
+ elsif waitingresult == WEEL::Signal::Salvage
774
+ salvage
775
+ else
776
+ finalize
777
+ end
766
778
  if code.is_a?(Proc) || code.is_a?(String)
767
779
  handlerwrapper.inform_activity_manipulate
768
780
  if code.is_a?(Proc)
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "weel"
3
- s.version = "1.99.75"
3
+ s.version = "1.99.76"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.license = "LGPL-3.0"
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.75
4
+ version: 1.99.76
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: 2019-09-05 00:00:00.000000000 Z
12
+ date: 2019-10-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: test-unit