weel 1.99.75 → 1.99.76

Sign up to get free protection for your applications and to get access to all the features.
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