soar_sr 0.1.3

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.
@@ -0,0 +1,172 @@
1
+ require 'jsender'
2
+ require 'soap4juddi'
3
+ require 'persistent-cache'
4
+
5
+ module SoarSr
6
+ class JUDDIProvider
7
+ def initialize(urns, broker, cache_freshness)
8
+ @urns = urns
9
+ @broker = broker
10
+ @cache = Persistent::Cache.new("uddi-broker", cache_freshness, Persistent::Cache::STORAGE_RAM)
11
+ end
12
+
13
+ def broker
14
+ @broker
15
+ end
16
+
17
+ def assign_service_to_business(name, business_key = @urns['company'])
18
+ @broker.authorize
19
+ result = get_service(name)
20
+ service = result['data']
21
+ @broker.save_service_element(service['name'], service['description'], service['definition'], @urns['services'], business_key)
22
+ end
23
+
24
+ def assign_service_component_to_business(name, business_key = @urns['company'])
25
+ @broker.authorize
26
+ result = get_service_component(name)
27
+ service = result['data']
28
+ @broker.save_service_element(service['name'], service['description'], service['definition'], @urns['service-components'], business_key)
29
+ end
30
+
31
+ def get_service(name)
32
+ cached = @cache["get_service:#{name}"]; return cached if cached
33
+ value = @broker.get_service_element(name, @urns['services'])
34
+ @cache["get_service:#{name}"] = value
35
+ value
36
+ end
37
+
38
+ def save_service(name, description = nil, definition = nil)
39
+ @broker.authorize
40
+ @broker.save_service_element(name, description.is_a?(Array) ? description : [description], definition, @urns['services'], @urns['company'])
41
+ end
42
+
43
+ def delete_service(name)
44
+ @broker.authorize
45
+ @broker.delete_service_element(name, @urns['services'])
46
+ end
47
+
48
+ def find_services(pattern = nil)
49
+ pattern = pattern.nil? ? '%' : "%#{pattern}%"
50
+
51
+ cached = @cache["find_services:#{pattern}"]; return cached if cached
52
+ value = @broker.find_services(pattern)
53
+ @cache["find_services:#{pattern}"] = value
54
+ value
55
+ end
56
+
57
+ def add_service_uri(service, uri)
58
+ result = remove_service_uri(service, uri)
59
+ result = save_service_uri(service, uri) if result['status'] == 'success'
60
+ result
61
+ end
62
+
63
+ def remove_service_uri(service, uri)
64
+ @broker.authorize
65
+ result = service_uris(service)
66
+ existing_id = has_existing_binding?(result['data']['bindings'], uri) if has_bindings?(result)
67
+ result = @broker.delete_binding(existing_id) if existing_id
68
+ result
69
+ end
70
+
71
+ def service_uris(service)
72
+ cached = @cache["service_uris:#{service}"]; return cached if cached
73
+ value = @broker.find_element_bindings(service, @urns['services'])
74
+ @cache["service_uris:#{service}"] = value
75
+ value
76
+ end
77
+
78
+ def get_service_component(name)
79
+ cached = @cache["get_service_component:#{name}"]; return cached if cached
80
+ value = @broker.get_service_element(name, @urns['service-components'])
81
+ @cache["get_service_component:#{name}"] = value
82
+ value
83
+ end
84
+
85
+ def save_service_component(name, description = nil, definition = nil)
86
+ @broker.authorize
87
+ @broker.save_service_element(name, description.is_a?(Array) ? description : [description], definition, @urns['service-components'], @urns['company'])
88
+ end
89
+
90
+ def delete_service_component(name)
91
+ @broker.authorize
92
+ @broker.delete_service_element(name, @urns['service-components'])
93
+ end
94
+
95
+ def find_service_components(pattern = nil)
96
+ pattern = pattern.nil? ? '%' : "%#{pattern}%"
97
+ cached = @cache["find_service_components:#{pattern}"]; return cached if cached
98
+
99
+ value = @broker.find_service_components(pattern)
100
+ @cache["find_service_components:#{pattern}"] = value
101
+ value
102
+ end
103
+
104
+ def save_service_component_uri(service_component, uri)
105
+ @broker.authorize
106
+ result = @broker.find_element_bindings(service_component, @urns['service-components'])
107
+ # only one binding for service components
108
+ delete_existing_bindings(result['data']['bindings']) if has_bindings?(result)
109
+ @broker.save_element_bindings(service_component, [uri], @urns['service-components'], "service component")
110
+ end
111
+
112
+ def delete_existing_bindings(bindings)
113
+ bindings.each do |binding, detail|
114
+ @broker.delete_binding(binding)
115
+ end
116
+ end
117
+
118
+ def find_service_component_uri(service_component)
119
+ cached = @cache["find_service_component_uri:#{service_component}"]; return cached if cached
120
+ value = @broker.find_element_bindings(service_component, @urns['service-components'])
121
+ @cache["find_service_component_uri:#{service_component}"] = value
122
+ value
123
+ end
124
+
125
+ def save_business(key, name, description = nil, contacts = nil)
126
+ @broker.authorize
127
+ @broker.save_business(key, name, description, contacts)
128
+ end
129
+
130
+ def get_business(key)
131
+ cached = @cache["get_business:#{key}"]; return cached if cached
132
+ value = @broker.get_business(key)
133
+ @cache["get_business:#{key}"] = value
134
+ value
135
+ end
136
+
137
+ def find_businesses(pattern = nil)
138
+ pattern = pattern.nil? ? '%' : "%#{pattern}%"
139
+ cached = @cache["find_businesses:#{pattern}"]; return cached if cached
140
+ value = @broker.find_business(pattern)
141
+ @cache["find_businesses:#{pattern}"] = value
142
+ value
143
+ end
144
+
145
+ def delete_business(key)
146
+ @broker.authorize
147
+ @broker.delete_business(key)
148
+ end
149
+
150
+ def business_eq?(business, comparison)
151
+ business == "#{@urns['domains']}#{comparison}"
152
+ end
153
+
154
+ private
155
+
156
+ def has_bindings?(result)
157
+ result and result['data'] and result['data']['bindings'] and (result['data']['bindings'].size > 0)
158
+ end
159
+
160
+ def has_existing_binding?(bindings, uri)
161
+ bindings.each do |binding, detail|
162
+ return binding if detail['access_point'] == uri
163
+ end
164
+ nil
165
+ end
166
+
167
+ def save_service_uri(service, uri)
168
+ @broker.authorize
169
+ @broker.save_element_bindings(service, [uri], @urns['services'], "service uri")
170
+ end
171
+ end
172
+ end
@@ -0,0 +1,104 @@
1
+ require 'jsender'
2
+ require 'soap4juddi'
3
+
4
+ module SoarSr
5
+ class Search < SoarSr::Handler
6
+ include Jsender
7
+
8
+ def query_service_by_pattern(pattern)_{
9
+ provided?(pattern, 'pattern')
10
+ result = @uddi.find_services
11
+ list = {}
12
+ if has_data?(result, 'services')
13
+ result['data']['services'].each do |service, name|
14
+ detail = @uddi.get_service(service)
15
+ if has_data?(detail, 'description')
16
+ found = false
17
+ dss = nil
18
+ detail['data']['description'].each do |description|
19
+ found = true if (description and description.include?(pattern))
20
+ dss = description.gsub("dss:", "").strip if (description and description.include?('dss:'))
21
+ end
22
+ list[service] = detail if ((dss and (@dss and check_dss(service))) or (not dss)) and found
23
+ end
24
+ end
25
+ end
26
+
27
+ success_data({ 'services' => list })
28
+ }end
29
+
30
+ def search_for_service_by_name(name)
31
+ search_for_service(name, false, false)
32
+ end
33
+
34
+ def search_for_service(pattern, include_service_components = true, full_text = true)_{
35
+ provided?(pattern, 'pattern') and length_at_least?(pattern, 4, 'pattern')
36
+
37
+ services = {}
38
+ service_components = {}
39
+ services_list = @uddi.find_services(pattern)['data']['services'] if not include_service_components
40
+ services_list, service_components_list = @registry.services.find_services_and_service_components(nil) if include_service_components
41
+ services_list.each do |service, detail|
42
+ service_name = extract_domain_name('services', service)
43
+ if full_text
44
+ data = @uddi.get_service(service)['data'] if full_text
45
+ if search_for_pattern_in_hash_values(data, pattern)
46
+ services[service_name] = data
47
+ services[service_name]['uris'] = @registry.services.service_uris(service_name)['data']['bindings']
48
+ end
49
+ else
50
+ if service_name == service
51
+ services[service_name] = detail
52
+ services[service_name]['uris'] = @registry.services.service_uris(service_name)['data']['bindings']
53
+ end
54
+ end
55
+ end
56
+ if (include_service_components)
57
+ service_components_list.each do |service_component, detail|
58
+ service_name = extract_domain_name('services-components', service_component)
59
+ if full_text
60
+ data = @uddi.get_service_component(service_component)['data']
61
+ service_components[service_name] = data if search_for_pattern_in_hash_values(data, pattern)
62
+ else
63
+ service_components[service_name] = detail if service_name == service_component
64
+ end
65
+ end
66
+ end
67
+ found = services.merge!(service_components)
68
+
69
+ success_data({'services' => found})
70
+ }end
71
+
72
+ def search_domain_perspective(domain_perspective, pattern)_{
73
+ provided?(domain_perspective, 'domain perspective') and registered?(domain_perspective, 'domain perspective')
74
+
75
+ found = {}
76
+ data = @registry.associations.domain_perspective_associations(domain_perspective)['data']['associations']
77
+ services = {}
78
+ service_components = {}
79
+ services_list = data['services']
80
+ service_components_list = data['service_components']
81
+ services_list.each do |service, detail|
82
+ data = @uddi.get_service(service)['data']
83
+ services[extract_domain_name('services', service)] = data if search_for_pattern_in_hash_values(data, pattern)
84
+ end
85
+ service_components_list.each do |service_component, detail|
86
+ data = @uddi.get_service_component(service_component)['data']
87
+ service_components[extract_domain_name('services-components', service_component)] = data if search_for_pattern_in_hash_values(data, pattern)
88
+ end
89
+ found = services.merge!(service_components)
90
+ success_data({'services' => found})
91
+ }end
92
+
93
+ private
94
+
95
+ def search_for_pattern_in_hash_values(data, pattern)
96
+ data.keys.each do |key|
97
+ value = data[key]
98
+ return true if (not value.is_a?(Hash)) and (value.to_s.include?(pattern))
99
+ return true if (value.is_a?(Hash)) and (search_for_pattern_in_hash_values(value, pattern))
100
+ end
101
+ return false
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,92 @@
1
+ require 'jsender'
2
+ require 'soap4juddi'
3
+
4
+ module SoarSr
5
+ class ServiceComponents < SoarSr::Handler
6
+ include Jsender
7
+
8
+ def delete_all_service_components()_{
9
+ authorize
10
+ result = list_service_components
11
+ if has_data?(result, 'service_components')
12
+ result['data']['service_components'].each do |name, detail|
13
+ @uddi.delete_service_component(name)
14
+ end
15
+ end
16
+ }end
17
+
18
+ def list_service_components(domain_perspective = nil)_{
19
+ return fail('unknown domain perspective provided') if domain_perspective and (not is_registered?(@registry.domain_perspectives.domain_perspective_registered?(domain_perspective)))
20
+
21
+ result = @uddi.find_service_components
22
+ service_components = has_data?(result, 'services') ? result['data']['services'] : {}
23
+ found = []
24
+
25
+ if not domain_perspective.nil?
26
+ associations = @registry.associations.domain_perspective_associations(domain_perspective)['data']['associations']['service_components']
27
+ return success_data({'service_components' => []}) if associations.count == 0
28
+
29
+ associations.each do |id, associated|
30
+ if associated
31
+ service_components.each do |sid, service_component|
32
+ found << sid if compile_domain_id('service-components', sid) == id
33
+ end
34
+ end
35
+ end
36
+ else
37
+ service_components.each do |sid, service_component|
38
+ found << sid
39
+ end
40
+ end
41
+
42
+ success_data('service_components' => found)
43
+ }end
44
+
45
+ def service_component_registered?(service_component)_{
46
+ result = @uddi.find_service_components(service_component)
47
+ registered = false
48
+ if has_data?(result, 'services')
49
+ result['data']['services'].each do |service_key, description|
50
+ registered = (service_component.downcase == service_key.downcase)
51
+ end
52
+ end
53
+ success_data({'registered' => registered})
54
+ }end
55
+
56
+ def register_service_component(service_component)_{
57
+ authorize
58
+ provided?(service_component, 'service component') and not_registered?(service_component, 'service component')
59
+
60
+ result = @uddi.save_service_component(service_component)
61
+ authorized?(result) and identifier?(result, 'service component')
62
+ success('service component registered')
63
+ }end
64
+
65
+ def deregister_service_component(service_component)_{
66
+ # byebug
67
+ authorize
68
+ provided?(service_component, 'service component') and registered?(service_component, 'service component')
69
+ raise ValidationError, 'service component has domain perspective associations' if @registry.associations.service_component_has_domain_perspective_associations?(service_component)
70
+ result = @uddi.delete_service_component(service_component)
71
+ authorized?(result) and identifier?(result, 'service component')
72
+ success('service component deregistered')
73
+ }end
74
+
75
+ def configure_service_component_uri(service_component, uri)_{
76
+ authorize
77
+ provided?(service_component, 'service component') and provided?(uri, 'URI') and uri?(uri) and registered?(service_component, 'service component')
78
+ result = @uddi.save_service_component_uri(service_component, uri)
79
+ authorized?(result) and identifier?(result, 'service component')
80
+ success
81
+ }end
82
+
83
+ def service_component_uri(service_component)_{
84
+ provided?(service_component, 'service component') and registered?(service_component, 'service component')
85
+ result = @uddi.find_service_component_uri(service_component)
86
+ identifier?(result, 'service component')
87
+ uri = (has_data?(result, 'bindings') and (result['data']['bindings'].size > 0)) ? result['data']['bindings'].first[1]['access_point'] : nil
88
+ result['data']['uri'] = uri
89
+ success_data(result['data'])
90
+ }end
91
+ end
92
+ end
@@ -0,0 +1,39 @@
1
+ require 'jsender'
2
+ require 'soap4juddi'
3
+
4
+ module SoarSr
5
+ class ServiceDefinitions < SoarSr::Handler
6
+ include Jsender
7
+
8
+ def register_service_definition(service, definition)_{
9
+ authorize
10
+ provided?(service, 'service') and registered?(service, 'service') and provided?(definition, 'service definition') and wadl?(definition)
11
+ result = @uddi.get_service(service)
12
+ service = result['data']
13
+ service['definition'] = definition
14
+ result = @uddi.save_service(service['name'], service['description'], service['definition'])
15
+ authorized?(result) and identifier?(result, 'service')
16
+ success('service definition registered')
17
+ }end
18
+
19
+ def service_definition_for_service(service)_{
20
+ # byebug
21
+ provided?(service, 'service') and registered?(service, 'service')
22
+ result = @uddi.get_service(service)['data']
23
+ identifier?(result, 'service')
24
+ return fail('service has no definition') if (result['definition'].nil?) or (result['definition'] == "")
25
+ success_data({'definition' => result['definition']})
26
+ }end
27
+
28
+ def deregister_service_definition(service)_{
29
+ authorize
30
+ provided?(service, 'service') and registered?(service, 'service')
31
+ result = @uddi.get_service(service)
32
+ service = result['data']
33
+ service['definition'] = ""
34
+ result = @uddi.save_service(service['name'], service['description'], service['definition'])
35
+ authorized?(result) and identifier?(result, 'service')
36
+ success('service definition deregistered')
37
+ }end
38
+ end
39
+ end
@@ -0,0 +1,71 @@
1
+ require 'jsender'
2
+ require 'soap4juddi'
3
+
4
+ module SoarSr
5
+ class ServiceRegistry
6
+ attr_reader :services
7
+ attr_reader :service_definitions
8
+ attr_reader :service_components
9
+ attr_reader :domain_perspectives
10
+ attr_reader :teams
11
+ attr_reader :associations
12
+ attr_reader :search
13
+ attr_reader :broker
14
+ attr_reader :contacts
15
+
16
+ def initialize(uri, company, company_name, credentials, cache_freshness = 60)
17
+ @urns = initialize_urns(company, company_name)
18
+ @uddi = initialize_uddi_provider(uri, @urns, credentials, cache_freshness)
19
+ initialize_handlers(@urns, @uddi, credentials)
20
+ end
21
+
22
+ def check_dss(name)
23
+ end
24
+
25
+ private
26
+
27
+ def initialize_urns(fqdn, company_name)
28
+ base = "uddi:#{fqdn}"
29
+ @urns = { 'base' => base,
30
+ 'company' => "#{base}:#{company_name}",
31
+ 'domains' => "#{base}:domains-",
32
+ 'teams' => "#{base}:teams-",
33
+ 'services' => "#{base}:services:",
34
+ 'service-components' => "#{base}:service-components:" }
35
+ @urns
36
+ end
37
+
38
+ def initialize_uddi_provider(uri, urns, credentials, cache_freshness)
39
+ @broker = ::Soap4juddi::Broker.new(urns)
40
+ @broker.set_uri(uri)
41
+ @uddi = ::SoarSr::JUDDIProvider.new(urns, @broker, cache_freshness)
42
+ end
43
+
44
+ def initialize_handlers(urns, uddi, credentials)
45
+ initialize_service_handlers(urns, uddi, credentials)
46
+ initialize_domain_handlers(urns, uddi, credentials)
47
+ initialize_associations_and_search(urns, uddi, credentials)
48
+ initialize_contacts(urns, uddi, credentials)
49
+ end
50
+
51
+ def initialize_service_handlers(urns, uddi, credentials)
52
+ @services = SoarSr::Services.new(urns, uddi, credentials, self)
53
+ @service_definitions = SoarSr::ServiceDefinitions.new(urns, uddi, credentials, self)
54
+ @service_components = SoarSr::ServiceComponents.new(urns, uddi, credentials, self)
55
+ end
56
+
57
+ def initialize_domain_handlers(urns, uddi, credentials)
58
+ @domain_perspectives = SoarSr::DomainPerspectives.new(urns, uddi, credentials, self)
59
+ @teams = SoarSr::Teams.new(urns, uddi, credentials, self)
60
+ end
61
+
62
+ def initialize_associations_and_search(urns, uddi, credentials)
63
+ @associations = SoarSr::Associations.new(urns, uddi, credentials, self)
64
+ @search = SoarSr::Search.new(urns, uddi, credentials, self)
65
+ end
66
+
67
+ def initialize_contacts(urns, uddi, credentials)
68
+ @contacts = SoarSr::Contacts.new(urns, uddi, credentials, self)
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,157 @@
1
+ require 'jsender'
2
+ require 'soap4juddi'
3
+ require 'json'
4
+ require 'byebug'
5
+
6
+ module SoarSr
7
+ class Services < SoarSr::Handler
8
+ include Jsender
9
+
10
+ def register_service(service, description = nil)_{
11
+ authorize
12
+ key_provided?(service, 'name', 'service') and not_registered?(service['name'], 'service')
13
+ result = @uddi.save_service(service['name'], extract_description_and_meta(service, description), service['definition'])
14
+ authorized?(result) and identifier?(result, 'service')
15
+ success('service registered')
16
+ }end
17
+
18
+ def deregister_service(service)_{
19
+ authorize
20
+ provided?(service, 'service') and registered?(service, 'service')
21
+ result = @uddi.delete_service(service)
22
+ authorized?(result) and identifier?(result, 'service')
23
+ success('service deregistered')
24
+ }end
25
+
26
+ def service_registered?(service)_{
27
+ registered = false
28
+ if present?(service)
29
+ result = @uddi.find_services(service)
30
+ registered = find_matching_service(service, result) if has_data?(result, 'services')
31
+ end
32
+ success_data({'registered' => (registered ||= false)})
33
+ }end
34
+
35
+ def add_service_uri(service, uri)_{
36
+ authorize
37
+ provided?(service, 'service') and provided?(uri, 'URI') and uri?(uri) and registered?(service, 'service')
38
+ result = @uddi.add_service_uri(service, uri)
39
+ authorized?(result) and identifier?(result, 'service')
40
+ success
41
+ }end
42
+
43
+ def service_uris(service)_{
44
+ authorize
45
+ provided?(service, 'service') and registered?(service, 'service')
46
+ result = @uddi.service_uris(service)
47
+ authorized?(result) and identifier?(result, 'service')
48
+ success_data(result['data'])
49
+ }end
50
+
51
+ def remove_uri_from_service(service, uri)_{
52
+ authorize
53
+ provided?(service, 'service') and provided?(uri, 'URI') and uri?(uri) and registered?(service, 'service')
54
+ result = @uddi.remove_service_uri(service, uri)
55
+ authorized?(result) and identifier?(result, 'service')
56
+ success
57
+ }end
58
+
59
+ def configure_meta_for_service(service, meta)_{
60
+ authorize
61
+ provided?(service, 'service') and provided?(meta, 'meta') and meta?(meta) and registered?(service, 'service')
62
+
63
+ descriptions = merge_meta_with_service_descriptions(service, meta)
64
+ result = update_service_descriptions(service, descriptions)
65
+
66
+ authorized?(result) and identifier?(result, 'meta')
67
+ success('meta updated', result['data'])
68
+ }end
69
+
70
+ def meta_for_service(service)
71
+ provided?(service, "service") and registered?(service, 'service')
72
+ detail = @uddi.get_service(service)['data']
73
+ if detail['description']
74
+ detail['description'].each do |desc|
75
+ return JSON.parse(CGI.unescape(desc)) if (description_is_meta?(desc))
76
+ end
77
+ end
78
+ {}
79
+ end
80
+
81
+ def service_by_name(name)_{
82
+ provided?(name, "service")
83
+ services = search_for_service(name)
84
+ return extract_service_by_name_from_services_list(services, name) if has_data?(services, 'services')
85
+ raise FailureErrorError, 'failure finding service by name'
86
+ }end
87
+
88
+ def find_services_and_service_components(pattern)
89
+ services = @uddi.find_services(pattern)['data']['services']
90
+ service_components = @uddi.find_service_components(pattern)['data']['services']
91
+ services ||= {}
92
+ service_components ||= {}
93
+ return services, service_components
94
+ end
95
+
96
+ private
97
+
98
+ def update_service_descriptions(service, descriptions)
99
+ detail = @uddi.get_service(service)['data']
100
+ detail['description'] = descriptions
101
+ @uddi.save_service(detail['name'], detail['description'], detail['definition'])
102
+ end
103
+
104
+ def merge_meta_with_service_descriptions(service, meta)
105
+ descriptions = []
106
+ detail = @uddi.get_service(service)['data']
107
+ detail['description'] ||= {}
108
+ detail['description'].each do |desc|
109
+ descriptions << desc if not description_is_meta?(desc)
110
+ end
111
+ descriptions << CGI.escape(meta.to_json)
112
+ descriptions
113
+ end
114
+
115
+ def find_matching_service(service, result)
116
+ registered = false
117
+ result['data']['services'].each do |service_key, description|
118
+ registered = (service.downcase == service_key.downcase)
119
+ end
120
+ registered
121
+ end
122
+
123
+ def extract_description_and_meta(service, description = nil)
124
+ result = []
125
+ result << service['description'] if service['description'] and description.nil?
126
+ result << description if not description.nil?
127
+ result << service['meta'] if service['meta']
128
+ result
129
+ end
130
+
131
+ def search_for_service(pattern)
132
+ provided?(pattern, "pattern") and length_at_least?(pattern, 4, "pattern")
133
+
134
+ services, service_components = find_services_and_service_components(pattern)
135
+ services = map_service_uris(services)
136
+ found = services.merge!(service_components)
137
+
138
+ success_data({'services' => found})
139
+ end
140
+
141
+ def map_service_uris(services)
142
+ services_detailed = {}
143
+ services.each do |id, service|
144
+ service['uris'] = service_uris(service['name'])['data']['bindings']
145
+ end
146
+ end
147
+
148
+ def extract_service_by_name_from_services_list(result, name)
149
+ result['data']['services'].each do |sname, service|
150
+ compare_service = "#{@urns['services']}#{name}" == sname
151
+ compare_service_component = "#{@urns['service-components']}#{name}" == sname
152
+ return success_data({ 'services' => { sname => service }}) if compare_service or compare_service_component or (name == sname)
153
+ end
154
+ success_data({ 'services' => {}})
155
+ end
156
+ end
157
+ end
@@ -0,0 +1,20 @@
1
+ require 'jsender'
2
+ require 'soap4juddi'
3
+
4
+ module SoarSr
5
+ class Teams < SoarSr::DomainPerspectives
6
+ include Jsender
7
+
8
+ def team_registered?(domain_perspective)_{
9
+ domain_registered?('teams', domain_perspective)
10
+ }end
11
+
12
+ def register_team(domain_perspective)_{
13
+ register_domain('teams', domain_perspective)
14
+ }end
15
+
16
+ def deregister_team(domain_perspective)_{
17
+ deregister_domain('teams', domain_perspective)
18
+ }end
19
+ end
20
+ end
@@ -0,0 +1,4 @@
1
+ module SoarSr
2
+ class ValidationError < StandardError
3
+ end
4
+ end