soap4juddi 0.1.6 → 0.1.8

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: 65c3e4a81e6d6557654f1e4d469f826739e06d1d
4
- data.tar.gz: 4302bb9540e057601d98bffc8d268dc004ca086d
3
+ metadata.gz: 6eeb72a738505c99d644f5129fa372a319a50c39
4
+ data.tar.gz: a16aab08c0e0a2f9ef4485977495a7c5e2e5b63f
5
5
  SHA512:
6
- metadata.gz: aeaf8bf9ab5eab8a22516127130ee655ce72d5dea6bc85e4361a1a1093dfd303f1ded3f97fb742dfe63fc11ddf60dd53c82c58f3dd88c5f39ddc0a5377eb25c2
7
- data.tar.gz: e9cc19b283eaa2baed7d1692f89583d05e103cce552e95eb735587dd967dacef9f6550cf748a82db355561307fd7777034838e2a6be9e7c7cd2e4ca2f76524c9
6
+ metadata.gz: 9ced6c86ef600c3d03935faf1a21c2435aad05d83b03f7b99afc5dfa18922e3e179695a2347868078161119be9381eaa24e4cfed6766c3beb23891776e35a765
7
+ data.tar.gz: 85e3575f83470add6ad307625f2d58edd14ea4cd5da0a2f2c6d7ca7899c895304ab7368e6d3619077fb1370a68a24379672522ff1f216037e798104fa718e877
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ .byebug_history
1
2
  /.bundle/
2
3
  /.yardoc
3
4
  /Gemfile.lock
@@ -43,8 +43,7 @@ module Soap4juddi
43
43
  body = "#{body}#{xml}" if desc and not (desc == "")
44
44
  end
45
45
  end
46
-
47
- if contacts
46
+ if (contacts) and (not contacts.empty?)
48
47
  # byebug
49
48
  contacts_xml = ""
50
49
  contacts.each do |contact|
@@ -168,7 +167,7 @@ module Soap4juddi
168
167
 
169
168
  def extract_service(soap)
170
169
  entries = {}
171
- entries[@soap_xml.extract_id(soap, 'serviceKey')] = extract_name(soap)
170
+ entries[@soap_xml.extract_value(soap, 'serviceKey')] = extract_name(soap)
172
171
  entries
173
172
  end
174
173
 
@@ -178,7 +177,7 @@ module Soap4juddi
178
177
  while entry do
179
178
  service = entry[/<ns2:serviceInfo (.*?)<\/ns2:serviceInfo>/, 1]
180
179
  break if service.nil? or ((service.is_a? String) and (service.strip == ""))
181
- id = @soap_xml.extract_id(service, 'serviceKey')
180
+ id = @soap_xml.extract_value(service, 'serviceKey')
182
181
  entries[id.gsub(urn, "")] = { 'id' => id, 'name' => extract_name(service) } if id.include?(urn)
183
182
  entry[/<ns2:serviceInfo (.*?)<\/ns2:serviceInfo>/, 1] = ""
184
183
  entry.gsub!("<ns2:serviceInfo </ns2:serviceInfo>", "")
@@ -189,7 +188,7 @@ module Soap4juddi
189
188
 
190
189
  def extract_business(soap)
191
190
  entries = {}
192
- entries[@soap_xml.extract_id(soap, 'businessKey').gsub(@urns['domains'], "").gsub(@urns['teams'], "")] = { 'name' => extract_name(soap), 'description' => extract_descriptions(soap), 'contacts' => extract_contacts(soap) }
191
+ entries[@soap_xml.extract_value(soap, 'businessKey').gsub(@urns['domains'], "").gsub(@urns['teams'], "")] = { 'name' => extract_name(soap), 'description' => extract_descriptions(soap), 'contacts' => extract_contacts(soap) }
193
192
  entries
194
193
  end
195
194
 
@@ -200,7 +199,7 @@ module Soap4juddi
200
199
  business = entry[/<ns2:businessInfo (.*?)<\/ns2:businessInfo>/, 1]
201
200
  break if business.nil? or ((business.is_a? String) and (business.strip == ""))
202
201
  business[/<ns2:serviceInfos(.*?)<\/ns2:serviceInfos>/, 1] = "" if business[/<ns2:serviceInfos(.*?)<\/ns2:serviceInfos>/, 1]
203
- id = @soap_xml.extract_id(entry, 'businessKey')
202
+ id = @soap_xml.extract_value(entry, 'businessKey')
204
203
  key = id.gsub(@urns['domains'], "").gsub(@urns['teams'], "")
205
204
  entries[key] = { 'id' => id, 'name' => extract_name(business) }
206
205
  entry[/<ns2:businessInfo (.*?)<\/ns2:businessInfo>/, 1] = ""
@@ -214,11 +213,6 @@ module Soap4juddi
214
213
  soap[/<ns2:result errno="(.*?)"\/>/, 1]
215
214
  end
216
215
 
217
- def check_availability
218
- result = `curl -S #{@base_uri}/juddiv3 2>&1`
219
- not(result.downcase.include?("fail"))
220
- end
221
-
222
216
  def authenticate(auth_user, auth_password)
223
217
  @soap_connector.authenticate(auth_user, auth_password)
224
218
  end
@@ -245,7 +239,7 @@ module Soap4juddi
245
239
  while entry do
246
240
  binding = entry[/<ns2:bindingTemplate (.*?)<\/ns2:bindingTemplate>/, 1]
247
241
  break if binding.nil? or ((binding.is_a? String) and (binding.strip == ""))
248
- id = @soap_xml.extract_id(binding, 'bindingKey')
242
+ id = @soap_xml.extract_value(binding, 'bindingKey')
249
243
  entries[id] = {'access_point' => extract_access_point(binding), 'description' => extract_description(binding)}
250
244
  entry[/<ns2:bindingTemplate (.*?)<\/ns2:bindingTemplate>/, 1] = ""
251
245
  entry.gsub!("<ns2:bindingTemplate </ns2:bindingTemplate>", "")
@@ -277,7 +271,7 @@ module Soap4juddi
277
271
  while entry do
278
272
  binding = entry[/<ns2:bindingTemplate (.*?)<\/ns2:bindingTemplate>/, 1]
279
273
  break if binding.nil? or ((binding.is_a? String) and (binding.strip == ""))
280
- id = @soap_xml.extract_id(binding, 'bindingKey')
274
+ id = @soap_xml.extract_value(binding, 'bindingKey')
281
275
  entries << extract_access_point(binding)
282
276
  entry[/<ns2:bindingTemplate (.*?)<\/ns2:bindingTemplate>/, 1] = ""
283
277
  entry.gsub!("<ns2:bindingTemplate </ns2:bindingTemplate>", "")
@@ -1,24 +1,32 @@
1
1
  require 'net/http'
2
+ require 'jsender'
2
3
 
3
4
  module Soap4juddi
4
5
  class Connector
5
- include Soap4juddi::JSender
6
+ include Jsender
7
+
8
+ attr_reader :uri
9
+ attr_reader :soap_xml
10
+ attr_accessor :auth_token
6
11
 
7
12
  def initialize
8
13
  @soap_xml = Soap4juddi::XML.new
9
14
  end
10
15
 
16
+ def has_credentials?
17
+ return true if @auth_user or @auth_password
18
+ false
19
+ end
20
+
11
21
  def authenticate(auth_user, auth_password)
12
- @auth_user = auth_user
13
- @auth_password =auth_password
22
+ @auth_user = auth_user
23
+ @auth_password =auth_password
14
24
  end
15
25
 
16
26
  def authorize(base_uri)
17
- @auth_token = '' # clear any existing token
18
- result = execute(build_authorization_request(base_uri)) do |res|
19
- @auth_token = (res.body.split('authtoken:')[1]).split('<')[0]
20
- end
21
- @auth_token
27
+ validate_base_uri(base_uri)
28
+ @auth_token = '' #clear existing auth token
29
+ @auth_token = request_auth_token(base_uri)
22
30
  end
23
31
 
24
32
  def request_soap(base_uri, version, service, request, attr = nil, &block)
@@ -30,15 +38,31 @@ module Soap4juddi
30
38
  end
31
39
 
32
40
  def execute(req, &block)
41
+ validate_destination(req)
33
42
  res = Net::HTTP.start(@uri.hostname, @uri.port) do |http|
34
43
  http.request(req)
35
44
  end
36
-
37
45
  jsend_result(res, block)
38
46
  end
39
47
 
48
+ def connection(base_uri, service, action)
49
+ validate_connection_parameters(base_uri, service, action)
50
+ build_post_request(base_uri, service, action)
51
+ end
52
+
53
+ def extract_auth_token(body)
54
+ (body.split('authtoken:')[1]).split('<')[0]
55
+ end
56
+
40
57
  private
41
58
 
59
+ def request_auth_token(base_uri)
60
+ result = execute(build_authorization_request(base_uri)) do |res|
61
+ @auth_token = extract_auth_token(res.body)
62
+ end
63
+ @auth_token
64
+ end
65
+
42
66
  def build_authorization_request(base_uri)
43
67
  req = connection(base_uri, 'security', 'get_authToken')
44
68
  auth = @soap_xml.element_with_value('get_authToken', '', {'userID' => @auth_user, 'cred' => @auth_password})
@@ -46,14 +70,6 @@ module Soap4juddi
46
70
  req
47
71
  end
48
72
 
49
- def connection(base_uri, service, action)
50
- @uri = URI("#{base_uri}/juddiv3/services/#{service}")
51
- req = Net::HTTP::Post.new(@uri)
52
- req.content_type = @soap_xml.content_type
53
- req['SOAPAction'] = action
54
- req
55
- end
56
-
57
73
  def jsend_result(res, block)
58
74
  case res
59
75
  when Net::HTTPSuccess
@@ -68,5 +84,33 @@ module Soap4juddi
68
84
  return success_data(result) if result
69
85
  return success
70
86
  end
87
+
88
+ def build_uri(base_uri, service)
89
+ @uri = URI("#{base_uri}/juddiv3/services/#{service}")
90
+ end
91
+
92
+ def validate_connection_parameters(base_uri, service, action)
93
+ validate_base_uri(base_uri)
94
+ raise Soap4juddi::InvalidDestinationError.new('no service provided') if service.nil?
95
+ raise Soap4juddi::InvalidDestinationError.new('no action provided') if action.nil?
96
+ true
97
+ end
98
+
99
+ def build_post_request(base_uri, service, action)
100
+ req = Net::HTTP::Post.new(build_uri(base_uri, service))
101
+ req.content_type = @soap_xml.content_type
102
+ req['SOAPAction'] = action
103
+ req
104
+ end
105
+
106
+ def validate_destination(req)
107
+ raise Soap4juddi::InvalidRequestError.new('no request provided') if req.nil?
108
+ true
109
+ end
110
+
111
+ def validate_base_uri(base_uri)
112
+ raise Soap4juddi::InvalidDestinationError.new('no base URI provided') if base_uri.nil?
113
+ true
114
+ end
71
115
  end
72
116
  end
@@ -0,0 +1,4 @@
1
+ module Soap4juddi
2
+ class InvalidDestinationError < ArgumentError
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Soap4juddi
2
+ class InvalidElementError < ArgumentError
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Soap4juddi
2
+ class InvalidRequestError < ArgumentError
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Soap4juddi
2
+ class InvalidTextError < ArgumentError
3
+ end
4
+ end
@@ -1,3 +1,3 @@
1
1
  module Soap4juddi
2
- VERSION = "0.1.6"
2
+ VERSION = "0.1.8"
3
3
  end
@@ -1,43 +1,87 @@
1
1
  module Soap4juddi
2
2
  class XML
3
3
  def element_with_key_value(element, key, value, attributes = nil)
4
- element_with_value(element, "#{key}:#{value}")
4
+ element_with_value(element, "#{key}:#{value}", attributes)
5
5
  end
6
6
 
7
7
  def element_with_value(element, value, attributes = nil)
8
+ validate_element(element)
8
9
  xml = "<urn:#{element}"
9
10
  xml = append_key_value_attributes_to_xml(xml, attributes) if attributes
10
- xml = "#{xml}>#{value}</urn:#{element}>"
11
+ xml += ">#{value}</urn:#{element}>"
11
12
  end
12
13
 
13
- def extract_id(soap, type)
14
- soap[/#{type}="(.*?)"/, 1]
14
+ def extract_value(soap, key)
15
+ validate_text(soap, 'text') and validate_text(key, 'key')
16
+ extract_value_in_quotes_using_key(soap, key)
15
17
  end
16
18
 
17
19
  def envelope_header_body(text, version = 3)
18
- "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:urn='urn:uddi-org:api_v#{version}'> <soapenv:Header/> <soapenv:Body> #{text} </soapenv:Body> </soapenv:Envelope>"
20
+ "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:urn='urn:uddi-org:api_v#{version.to_s}'> <soapenv:Header/> <soapenv:Body>#{text.to_s}</soapenv:Body> </soapenv:Envelope>"
19
21
  end
20
22
 
21
- def soap_envelope(message, urn = nil, attr = nil)
22
- text = ""
23
- text = text + "<urn:#{urn} generic='2.0' xmlns='urn:uddi-org:api_v2' " + (attr.nil? ? "" : attr) + ">" if urn
24
- text = text + message
25
- text = text + "</urn:#{urn}>" if urn
23
+ def soap_envelope(message, urn = nil, attributes = nil)
24
+ validate_text(urn, 'urn') if urn
25
+ validate_text(attributes, 'attributes') if attributes
26
+ text = inject_urn_and_attributes_into_message(message, urn, attributes)
26
27
  envelope_header_body(text, 2)
27
28
  end
28
-
29
+
29
30
  def content_type
30
31
  'text/xml;charset=UTF-8'
31
32
  end
32
33
 
33
34
  private
34
35
 
36
+ def validate_element(element)
37
+ raise Soap4juddi::InvalidElementError.new('invalid element provided') if element.nil?
38
+ raise Soap4juddi::InvalidElementError.new('invalid element provided') if not element.is_a?(String)
39
+ raise Soap4juddi::InvalidElementError.new('no element provided') if element.strip == ''
40
+ end
41
+
35
42
  def append_key_value_attributes_to_xml(xml, attributes)
36
- attributes.each do |k, v|
37
- v = "'#{v}'" if v.is_a?(String)
38
- xml = "#{xml} #{k}=#{v}"
43
+ attributes.each do |a, v|
44
+ xml += " #{a}='#{v}'"
39
45
  end
40
46
  xml
41
- end
47
+ end
48
+
49
+ def validate_text(text, label)
50
+ raise Soap4juddi::InvalidTextError.new("no #{label} provided") if text.nil?
51
+ raise Soap4juddi::InvalidTextError.new("invalid #{label} provided") if invalid_text?(text)
52
+ true
53
+ end
54
+
55
+ def invalid_text?(text)
56
+ ((not text.is_a?(String)) or (text.strip == ''))
57
+ end
58
+
59
+ def extract_value_in_quotes_using_key(soap, key)
60
+ extract_value_in_arbitrary_quotes_following_key_and_equal_sign(
61
+ collapse_spaces_around_equal_sign(soap), key
62
+ )
63
+ rescue
64
+ nil
65
+ end
66
+
67
+ def collapse_spaces_around_equal_sign(soap)
68
+ data = soap
69
+ data[/\s*=\s*/] = '='
70
+ data
71
+ end
72
+
73
+ def extract_value_in_arbitrary_quotes_following_key_and_equal_sign(soap, key)
74
+ result = soap[/#{key}="(.*?)"/, 1]
75
+ result ||= soap[/#{key}='(.*?)'/, 1]
76
+ result
77
+ end
78
+
79
+ def inject_urn_and_attributes_into_message(message, urn, attributes)
80
+ text = ""
81
+ text += "<urn:#{urn} generic='2.0' xmlns='urn:uddi-org:api_v2' " + (attributes.nil? ? "" : attributes) + ">" if urn
82
+ text += message.to_s
83
+ text += "</urn:#{urn}>" if urn
84
+ text
85
+ end
42
86
  end
43
87
  end
data/lib/soap4juddi.rb CHANGED
@@ -1,5 +1,8 @@
1
- require "soap4juddi/version"
2
- require 'soap4juddi/jsender'
1
+ require 'soap4juddi/version'
2
+ require 'soap4juddi/invalid_element_error'
3
+ require 'soap4juddi/invalid_text_error'
4
+ require 'soap4juddi/invalid_request_error'
5
+ require 'soap4juddi/invalid_destination_error'
3
6
  require 'soap4juddi/xml'
4
7
  require 'soap4juddi/connector'
5
8
  require 'soap4juddi/broker'
data/soap4juddi.gemspec CHANGED
@@ -23,4 +23,6 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency "bundler", "~> 1.10"
24
24
  spec.add_development_dependency "rake", "~> 10.0"
25
25
  spec.add_development_dependency "rspec"
26
+ spec.add_development_dependency "byebug"
27
+ spec.add_dependency "jsender"
26
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: soap4juddi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ernst van Graan
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-12-10 00:00:00.000000000 Z
11
+ date: 2015-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: jsender
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  description: Provides connector, xml and brokerage facilities to a jUDDI consumer
56
84
  email:
57
85
  - ernst.van.graan@hetzner.co.za
@@ -71,7 +99,10 @@ files:
71
99
  - lib/soap4juddi.rb
72
100
  - lib/soap4juddi/broker.rb
73
101
  - lib/soap4juddi/connector.rb
74
- - lib/soap4juddi/jsender.rb
102
+ - lib/soap4juddi/invalid_destination_error.rb
103
+ - lib/soap4juddi/invalid_element_error.rb
104
+ - lib/soap4juddi/invalid_request_error.rb
105
+ - lib/soap4juddi/invalid_text_error.rb
75
106
  - lib/soap4juddi/version.rb
76
107
  - lib/soap4juddi/xml.rb
77
108
  - soap4juddi.gemspec
@@ -1,50 +0,0 @@
1
- module Soap4juddi
2
- module JSender
3
- def report(status, message, result = nil)
4
- data = compile_data(result)
5
- data['notifications'] = message.is_a?(Array) ? message : [ message ]
6
- { 'status' => status, 'data' => data }
7
- end
8
-
9
- def fail(message = nil, data = nil)
10
- message ||= 'fail'
11
- report('fail', message, data)
12
- end
13
-
14
- def fail_data(data = nil)
15
- fail(nil, data)
16
- end
17
-
18
- def success_data(data = nil)
19
- success(nil, data)
20
- end
21
-
22
- def success(message = nil, data = nil)
23
- message ||= 'success'
24
- report('success', message, data)
25
- end
26
-
27
- def has_data?(result, key = nil)
28
- return false if key.nil?
29
- return false if (result.nil?) or (result['data'].nil?)
30
- return false if (not key.nil?) and (result['data'][key].nil?)
31
- true
32
- end
33
-
34
- def notifications_include?(result, pattern)
35
- return false if not has_data?(result, 'notifications')
36
- result['data']['notifications'].to_s.include?(pattern)
37
- end
38
-
39
- private
40
-
41
- def compile_data(result)
42
- data ||= {}
43
- result = { 'result' => result} if not result.is_a? Hash
44
- result.each do |key, value|
45
- data[key] = value
46
- end
47
- data
48
- end
49
- end
50
- end