soap4juddi 0.1.6 → 0.1.8

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