soar_sr 1.1.8 → 1.1.9

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3f99a09060456c4c1e1c88811f6823ae8b177688
4
- data.tar.gz: f672b0acf6180c45dda34efe7b7f29b27e88fb08
3
+ metadata.gz: 74ef5cd38ea67592ac85026463f7162449e11c06
4
+ data.tar.gz: a366c7a73d6e93fc659b61bd392e395d607e1138
5
5
  SHA512:
6
- metadata.gz: c7ad55f733f1b38cb0a7c467e79b7b98d8f21bdda3d87aa41808f32253bd3626d8f0f67a1da12a8d5064287b279464aa7325e20b9aaed331a4a962f9cf16f4be
7
- data.tar.gz: 317a418217543dd59dab48543c417c46db677409e1f3f579871a87e6baabcfa905ac269db144ad594fd1af3257e8aecd043b77c7c3987ee850313b2b82d550c0
6
+ metadata.gz: 7055ac00e8c02ea0cce619655f2b30b93a0a2cec87d9ae338892ff661b741977474fa827c43a109447f52abb0755e11623da823fb04fdd5e7c7c3e4bd61b541d
7
+ data.tar.gz: 4e37f159c663a79f511cbdc6e9c12cb0bfdbfebd34eb9da4be49b34bbb78fbf100237bea0dff38c969d35674fa8cfe452d303930bb3d16d8b3a647a90e273024
@@ -3,7 +3,7 @@ require 'soap4juddi'
3
3
  require 'byebug'
4
4
 
5
5
  module SoarSr
6
- class Associations < SoarSr::Handler
6
+ class Associations < SoarSr::ThreadedHandler
7
7
  include Jsender
8
8
 
9
9
  def service_component_has_domain_perspective_associations?(service_component)_{
@@ -44,6 +44,28 @@ module SoarSr
44
44
  (associations['service_components'].size > 0) or (associations['services'].size > 0)
45
45
  end
46
46
 
47
+ def service_associations(service)
48
+ service = standardize(service)
49
+ provided?(service, 'service') and registered?(service, 'services')
50
+ result = @registry.services.service_uris(service)
51
+ service = {'id' => compile_domain_id('services', service), 'uris' => result['data']['bindings'], 'associations' => { 'domain_perspectives' => []}}
52
+ domain_perspectives = @registry.domain_perspectives.list_domain_perspectives['data']['domain_perspectives']
53
+
54
+ threads = []
55
+ services = []
56
+ domain_perspectives.each do |name, details|
57
+ threads, services = domain_perspective_associations_threaded(threads, name, service, services)
58
+ end
59
+ join_threads(threads)
60
+ services.each do |sv|
61
+ service['associations']['domain_perspectives'] =
62
+ Hash::deep_merge(service['associations']['domain_perspectives'],
63
+ sv['associations']['domain_perspectives'])
64
+ service['associations']['domain_perspectives'] = service['associations']['domain_perspectives'].uniq
65
+ end
66
+ service
67
+ end
68
+
47
69
  def associate_service_component_with_domain_perspective(service_component, domain_perspective)_{
48
70
  service_component = standardize(service_component)
49
71
  domain_perspective = standardize(domain_perspective)
@@ -154,6 +176,31 @@ module SoarSr
154
176
 
155
177
  private
156
178
 
179
+ def domain_perspective_associations_threaded(threads, domain_perspective, service, services)
180
+ thread = nil
181
+ threads = join_on_max_threads(threads)
182
+ threads << Thread.new do
183
+ result = map_domain_perspective_associations(domain_perspective, service)
184
+ @@mutex.synchronize do
185
+ services << result
186
+ end
187
+ end
188
+ return threads, services
189
+ end
190
+
191
+ def map_domain_perspective_associations(domain_perspective, service)
192
+ result = domain_perspective_associations(domain_perspective)
193
+ result['data']['associations']['services'].each do |id, associated|
194
+ `echo "#{id} -> #{associated} with #{service[id]} and #{id} and #{associated}}" >> /Users/ernstv/scratch/log` if (domain_perspective == 'testing')
195
+ if ((service['id'] == id) and (associated == true))
196
+ service['associations'] ||= {}
197
+ service['associations']['domain_perspectives'] ||= []
198
+ service['associations']['domain_perspectives'] << domain_perspective
199
+ end
200
+ end
201
+ service
202
+ end
203
+
157
204
  def no_meta?(meta)
158
205
  (meta['associations']['service_components'] == {}) and (meta['associations']['services'] == {})
159
206
  end
@@ -4,16 +4,9 @@ require 'json'
4
4
  require 'byebug'
5
5
 
6
6
  module SoarSr
7
- class Services < SoarSr::Handler
7
+ class Services < SoarSr::ThreadedHandler
8
8
  include Jsender
9
9
  ALL_SERVICES = nil unless defined? ALL_SERVICES; ALL_SERVICES.freeze
10
- attr_accessor :max_threads
11
-
12
- def initialize(urns, uddi, credentials, registry, max_threads = 15)
13
- super(urns, uddi, credentials, registry)
14
- @@mutex = Mutex.new
15
- @max_threads = max_threads
16
- end
17
10
 
18
11
  def register_service(service, description = nil)_{
19
12
  service = standardize(service)
@@ -177,20 +170,6 @@ module SoarSr
177
170
  services
178
171
  end
179
172
 
180
- def join_threads(threads)
181
- threads.each do |t|
182
- t.join
183
- end
184
- end
185
-
186
- def join_on_max_threads(threads)
187
- if threads.count == @max_threads
188
- join_threads(threads)
189
- threads = []
190
- end
191
- threads
192
- end
193
-
194
173
  def map_service_uri_threaded(threads, service)
195
174
  thread = nil
196
175
  threads = join_on_max_threads(threads)
@@ -0,0 +1,28 @@
1
+ module SoarSr
2
+ class ThreadedHandler < Handler
3
+ include Jsender
4
+ attr_accessor :max_threads
5
+
6
+ def initialize(urns, uddi, credentials, registry, max_threads = 15)
7
+ super(urns, uddi, credentials, registry)
8
+ @@mutex = Mutex.new
9
+ @max_threads = max_threads
10
+ end
11
+
12
+ protected
13
+
14
+ def join_threads(threads)
15
+ threads.each do |t|
16
+ t.join
17
+ end
18
+ end
19
+
20
+ def join_on_max_threads(threads)
21
+ if threads.count == @max_threads
22
+ join_threads(threads)
23
+ threads = []
24
+ end
25
+ threads
26
+ end
27
+ end
28
+ end
@@ -1,3 +1,3 @@
1
1
  module SoarSr
2
- VERSION = "1.1.8"
2
+ VERSION = "1.1.9"
3
3
  end
data/lib/soar_sr.rb CHANGED
@@ -2,6 +2,7 @@ require "soar_sr/version"
2
2
  require "soar_sr/validation_error"
3
3
  require "soar_sr/validator"
4
4
  require "soar_sr/handler"
5
+ require "soar_sr/threaded_handler"
5
6
  require "soar_sr/services"
6
7
  require "soar_sr/service_components"
7
8
  require "soar_sr/service_definitions"
@@ -20,7 +21,12 @@ end
20
21
 
21
22
  class ::Hash
22
23
  def self.deep_merge(first, second)
23
- result = first.merge(second)
24
+ result = first
25
+ if first.is_a?(Hash) and (second.is_a?(Hash))
26
+ result = first.merge(second)
27
+ else
28
+ return first + second
29
+ end
24
30
  first.each do |first_key, first_value|
25
31
  second.each do |second_key, second_value|
26
32
  if (first_key == second_key)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: soar_sr
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.8
4
+ version: 1.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ernst van Graan
@@ -139,6 +139,7 @@ files:
139
139
  - lib/soar_sr/service_registry.rb
140
140
  - lib/soar_sr/services.rb
141
141
  - lib/soar_sr/teams.rb
142
+ - lib/soar_sr/threaded_handler.rb
142
143
  - lib/soar_sr/validation_error.rb
143
144
  - lib/soar_sr/validator.rb
144
145
  - lib/soar_sr/version.rb