opensrs 0.3.5 → 0.3.6
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 +4 -4
- data/bin/console +10 -0
- data/bin/setup +7 -0
- data/lib/opensrs.rb +6 -6
- data/lib/opensrs/response.rb +13 -11
- data/lib/opensrs/server.rb +5 -6
- data/lib/opensrs/version.rb +1 -3
- data/lib/opensrs/xml_processor.rb +0 -2
- data/lib/opensrs/xml_processor/libxml.rb +52 -45
- data/lib/opensrs/xml_processor/nokogiri.rb +43 -41
- data/opensrs.gemspec +9 -11
- metadata +28 -22
- data/spec/opensrs/server_spec.rb +0 -139
- data/spec/opensrs/version_spec.rb +0 -7
- data/spec/opensrs/xml_processor/libxml_spec.rb +0 -253
- data/spec/opensrs/xml_processor/nokogiri_spec.rb +0 -246
- data/spec/spec_helper.rb +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 859e3e67b33ab3a4c5f7c071531a409e16048650
|
4
|
+
data.tar.gz: ca25ef41d7a29a3f8bd1b491a022c4af1135caf1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 783c86e4637b6f6ba6f4c12e4519118e42e3c4e700c2ccf2ad702021ebe569d3a62e419f167827e74176ea1b2892cbd78d6768fcf94f73ee88c4fd8180d093ed
|
7
|
+
data.tar.gz: 8d271520d7d262eb3c11cf5645d3849e1f03ebfcf727fe4c1f2043d800a9dfdac745dd7d4f7b04d6d2fd9152daa05f7d1c630ade248d6a8f32c6b12b07916503
|
data/bin/console
ADDED
data/bin/setup
ADDED
data/lib/opensrs.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
1
|
+
require "opensrs/xml_processor"
|
2
|
+
require "opensrs/xml_processor/libxml"
|
3
|
+
require "opensrs/server"
|
4
|
+
require "opensrs/response"
|
5
|
+
require "opensrs/version"
|
6
6
|
|
7
7
|
module OpenSRS
|
8
|
-
end
|
8
|
+
end
|
data/lib/opensrs/response.rb
CHANGED
@@ -2,28 +2,30 @@ module OpenSRS
|
|
2
2
|
class Response
|
3
3
|
attr_reader :request_xml, :response_xml
|
4
4
|
attr_accessor :response, :success
|
5
|
-
|
5
|
+
|
6
6
|
def initialize(parsed_response, request_xml, response_xml)
|
7
7
|
@response = parsed_response
|
8
8
|
@request_xml = request_xml
|
9
9
|
@response_xml = response_xml
|
10
10
|
@success = success?
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
# We need to return the error message unless the
|
14
14
|
# response is successful.
|
15
15
|
def errors
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
end
|
16
|
+
unless success?
|
17
|
+
msg = @response["response_text"]
|
18
|
+
code = @response["response_code"]
|
19
|
+
|
20
|
+
return msg && code ? "#{msg} (Code #{code})" : "Unknown error"
|
22
21
|
end
|
23
22
|
end
|
24
|
-
|
23
|
+
|
24
|
+
# If 'is_success' is returned, the API is letting us know that they
|
25
|
+
# will explicitly tell us whether something has succeeded or not.
|
26
|
+
# Otherwise, just assume it is successful.
|
25
27
|
def success?
|
26
|
-
response["is_success"]
|
28
|
+
@response["is_success"] && @response["is_success"] == "1" ? true : false
|
27
29
|
end
|
28
30
|
end
|
29
|
-
end
|
31
|
+
end
|
data/lib/opensrs/server.rb
CHANGED
@@ -19,7 +19,7 @@ module OpenSRS
|
|
19
19
|
@password = options[:password]
|
20
20
|
@key = options[:key]
|
21
21
|
@timeout = options[:timeout]
|
22
|
-
@open_timeout
|
22
|
+
@open_timeout = options[:open_timeout]
|
23
23
|
@logger = options[:logger]
|
24
24
|
end
|
25
25
|
|
@@ -47,7 +47,7 @@ module OpenSRS
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def self.xml_processor=(name)
|
50
|
-
require
|
50
|
+
require "opensrs/xml_processor/#{name.to_s.downcase}"
|
51
51
|
@@xml_processor = OpenSRS::XmlProcessor.const_get("#{name.to_s.capitalize}")
|
52
52
|
end
|
53
53
|
|
@@ -56,7 +56,8 @@ module OpenSRS
|
|
56
56
|
private
|
57
57
|
|
58
58
|
def headers(request)
|
59
|
-
{
|
59
|
+
{
|
60
|
+
"Content-Length" => request.length.to_s,
|
60
61
|
"Content-Type" => "text/xml",
|
61
62
|
"X-Username" => username,
|
62
63
|
"X-Signature" => signature(request)
|
@@ -64,9 +65,7 @@ module OpenSRS
|
|
64
65
|
end
|
65
66
|
|
66
67
|
def signature(request)
|
67
|
-
|
68
|
-
signature = Digest::MD5.hexdigest(signature + key)
|
69
|
-
signature
|
68
|
+
Digest::MD5.hexdigest(Digest::MD5.hexdigest(request + key) + key)
|
70
69
|
end
|
71
70
|
|
72
71
|
def http
|
data/lib/opensrs/version.rb
CHANGED
@@ -1,60 +1,67 @@
|
|
1
|
-
|
1
|
+
begin
|
2
|
+
require 'libxml'
|
3
|
+
rescue LoadError => e
|
4
|
+
$stderr.puts "Cannot find `libxml` gem. Please install it before using it as the XML processor"
|
5
|
+
raise e
|
6
|
+
end
|
2
7
|
|
3
8
|
module OpenSRS
|
4
|
-
class XmlProcessor
|
5
|
-
|
6
|
-
|
7
|
-
# First, builds REXML elements for the inputted data. Then, it will
|
8
|
-
# go ahead and build the entire XML document to send to OpenSRS.
|
9
|
-
def self.build(data)
|
10
|
-
xml = Document.new
|
11
|
-
xml.root = envelope = Node.new("OPS_envelope")
|
12
|
-
|
13
|
-
envelope << header = Node.new("header")
|
14
|
-
envelope << body = Node.new("body")
|
15
|
-
header << Node.new("version", "0.9")
|
16
|
-
body << data_block = Node.new("data_block")
|
17
|
-
|
18
|
-
data_block << encode_data(data, data_block)
|
19
|
-
|
20
|
-
return xml.to_s
|
21
|
-
end
|
9
|
+
class XmlProcessor
|
10
|
+
class Libxml < OpenSRS::XmlProcessor
|
11
|
+
include ::LibXML::XML
|
22
12
|
|
23
|
-
|
13
|
+
# First, builds REXML elements for the inputted data. Then, it will
|
14
|
+
# go ahead and build the entire XML document to send to OpenSRS.
|
15
|
+
def self.build(data)
|
16
|
+
xml = Document.new
|
17
|
+
xml.root = envelope = Node.new("OPS_envelope")
|
24
18
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
19
|
+
envelope << header = Node.new("header")
|
20
|
+
envelope << body = Node.new("body")
|
21
|
+
header << Node.new("version", "0.9")
|
22
|
+
body << data_block = Node.new("data_block")
|
29
23
|
|
30
|
-
|
31
|
-
dt_array = []
|
24
|
+
data_block << encode_data(data, data_block)
|
32
25
|
|
33
|
-
|
34
|
-
next if item.empty?
|
35
|
-
dt_array[item.attributes["key"].to_i] = decode_data(item)
|
26
|
+
return xml.to_s
|
36
27
|
end
|
37
28
|
|
38
|
-
|
39
|
-
end
|
29
|
+
protected
|
40
30
|
|
41
|
-
|
42
|
-
|
31
|
+
def self.data_block_element(response)
|
32
|
+
doc = Parser.string(response).parse
|
33
|
+
return doc.find("//OPS_envelope/body/data_block/*")
|
34
|
+
end
|
43
35
|
|
44
|
-
element
|
45
|
-
|
46
|
-
|
36
|
+
def self.decode_dt_array_data(element)
|
37
|
+
dt_array = []
|
38
|
+
|
39
|
+
element.children.each do |item|
|
40
|
+
next if item.empty?
|
41
|
+
dt_array[item.attributes["key"].to_i] = decode_data(item)
|
42
|
+
end
|
43
|
+
|
44
|
+
return dt_array
|
47
45
|
end
|
48
46
|
|
49
|
-
|
50
|
-
|
47
|
+
def self.decode_dt_assoc_data(element)
|
48
|
+
dt_assoc = {}
|
51
49
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
50
|
+
element.children.each do |item|
|
51
|
+
next if item.content.strip.empty?
|
52
|
+
dt_assoc[item.attributes["key"]] = decode_data(item)
|
53
|
+
end
|
54
|
+
|
55
|
+
return dt_assoc
|
56
|
+
end
|
58
57
|
|
58
|
+
# Accepts two parameters but uses only one; to keep the interface same as other xml parser classes
|
59
|
+
# Is that a side effect of Template pattern?
|
60
|
+
#
|
61
|
+
def self.new_element(element_name, container)
|
62
|
+
return Node.new(element_name.to_s)
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
59
66
|
end
|
60
|
-
end
|
67
|
+
end
|
@@ -1,64 +1,66 @@
|
|
1
1
|
begin
|
2
2
|
require 'nokogiri'
|
3
3
|
rescue LoadError => e
|
4
|
-
$stderr.puts "Cannot find
|
4
|
+
$stderr.puts "Cannot find `nokogiri` gem. Please install it before using it as the XML processor"
|
5
5
|
raise e
|
6
6
|
end
|
7
7
|
|
8
8
|
module OpenSRS
|
9
|
-
class XmlProcessor
|
9
|
+
class XmlProcessor
|
10
|
+
class Nokogiri < OpenSRS::XmlProcessor
|
10
11
|
|
11
|
-
|
12
|
-
|
12
|
+
def self.build(data)
|
13
|
+
builder = ::Nokogiri::XML::Builder.new
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
15
|
+
envelope = ::Nokogiri::XML::Node.new("OPS_envelope", builder.doc)
|
16
|
+
header = ::Nokogiri::XML::Node.new("header", builder.doc)
|
17
|
+
version = ::Nokogiri::XML::Node.new("version", builder.doc)
|
18
|
+
body = ::Nokogiri::XML::Node.new("body", builder.doc)
|
19
|
+
data_block = ::Nokogiri::XML::Node.new("data_block", builder.doc)
|
20
|
+
other_data = encode_data(data, builder.doc)
|
21
|
+
version << '0.9'
|
22
|
+
header << version
|
23
|
+
envelope << header
|
24
|
+
builder.doc << envelope
|
25
|
+
data_block << other_data
|
26
|
+
body << data_block
|
27
|
+
envelope << body
|
28
|
+
return builder.to_xml
|
29
|
+
end
|
29
30
|
|
30
|
-
|
31
|
+
protected
|
31
32
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
def self.data_block_element(response)
|
34
|
+
doc = ::Nokogiri::XML(response)
|
35
|
+
return doc.xpath('//OPS_envelope/body/data_block/*')
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.decode_dt_array_data(element)
|
39
|
+
dt_array = []
|
36
40
|
|
37
|
-
|
38
|
-
|
41
|
+
element.children.each do |item|
|
42
|
+
next if item.content.strip.empty?
|
43
|
+
dt_array[item.attributes["key"].value.to_i] = decode_data(item.children)
|
44
|
+
end
|
39
45
|
|
40
|
-
|
41
|
-
next if item.content.strip.empty?
|
42
|
-
dt_array[item.attributes["key"].value.to_i] = decode_data(item.children)
|
46
|
+
return dt_array
|
43
47
|
end
|
44
48
|
|
45
|
-
|
46
|
-
|
49
|
+
def self.decode_dt_assoc_data(element)
|
50
|
+
dt_assoc = {}
|
47
51
|
|
48
|
-
|
49
|
-
|
52
|
+
element.children.each do |item|
|
53
|
+
next if item.content.strip.empty?
|
54
|
+
dt_assoc[item.attributes["key"].value] = decode_data(item.children)
|
55
|
+
end
|
50
56
|
|
51
|
-
|
52
|
-
next if item.content.strip.empty?
|
53
|
-
dt_assoc[item.attributes["key"].value] = decode_data(item.children)
|
57
|
+
return dt_assoc
|
54
58
|
end
|
55
59
|
|
56
|
-
|
57
|
-
|
60
|
+
def self.new_element(element_name, container)
|
61
|
+
return ::Nokogiri::XML::Node.new(element_name.to_s, container)
|
62
|
+
end
|
58
63
|
|
59
|
-
def self.new_element(element_name, container)
|
60
|
-
return ::Nokogiri::XML::Node.new(element_name.to_s, container)
|
61
64
|
end
|
62
|
-
|
63
65
|
end
|
64
66
|
end
|
data/opensrs.gemspec
CHANGED
@@ -1,15 +1,12 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
|
3
2
|
lib = File.expand_path('../lib', __FILE__)
|
4
|
-
|
5
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
6
|
-
|
7
|
-
require 'opensrs/version'
|
4
|
+
require "opensrs/version"
|
8
5
|
|
9
6
|
Gem::Specification.new do |spec|
|
10
7
|
|
11
8
|
spec.name = "opensrs"
|
12
|
-
spec.version = OpenSRS::
|
9
|
+
spec.version = OpenSRS::VERSION
|
13
10
|
spec.authors = [ "Joshua Delsman" ]
|
14
11
|
spec.email = [ "j@srv.im" ]
|
15
12
|
spec.summary = "OpenSRS API for Ruby"
|
@@ -17,17 +14,18 @@ Gem::Specification.new do |spec|
|
|
17
14
|
spec.homepage = "https://github.com/voxxit/opensrs"
|
18
15
|
spec.license = "MIT"
|
19
16
|
|
20
|
-
spec.files = `git ls-files -z`.split("\x0")
|
21
|
-
spec.
|
22
|
-
spec.
|
23
|
-
spec.require_paths = [
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
+
spec.bindir = "exe"
|
19
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
|
+
spec.require_paths = ["lib"]
|
24
21
|
|
25
22
|
spec.add_runtime_dependency "libxml-ruby", "~> 2"
|
26
23
|
|
27
|
-
spec.add_development_dependency "bundler"
|
24
|
+
spec.add_development_dependency "bundler"
|
28
25
|
spec.add_development_dependency "rake"
|
29
|
-
spec.add_development_dependency "rspec"
|
26
|
+
spec.add_development_dependency "rspec"
|
30
27
|
spec.add_development_dependency "shoulda"
|
31
28
|
spec.add_development_dependency "nokogiri"
|
29
|
+
spec.add_development_dependency "pry"
|
32
30
|
|
33
31
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opensrs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joshua Delsman
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: libxml-ruby
|
@@ -28,16 +28,16 @@ dependencies:
|
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -56,16 +56,16 @@ dependencies:
|
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: shoulda
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: pry
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
97
111
|
description: Provides support to utilize the OpenSRS API with Ruby.
|
98
112
|
email:
|
99
113
|
- j@srv.im
|
@@ -109,6 +123,8 @@ files:
|
|
109
123
|
- LICENSE.txt
|
110
124
|
- README.md
|
111
125
|
- Rakefile
|
126
|
+
- bin/console
|
127
|
+
- bin/setup
|
112
128
|
- lib/opensrs.rb
|
113
129
|
- lib/opensrs/response.rb
|
114
130
|
- lib/opensrs/server.rb
|
@@ -117,11 +133,6 @@ files:
|
|
117
133
|
- lib/opensrs/xml_processor/libxml.rb
|
118
134
|
- lib/opensrs/xml_processor/nokogiri.rb
|
119
135
|
- opensrs.gemspec
|
120
|
-
- spec/opensrs/server_spec.rb
|
121
|
-
- spec/opensrs/version_spec.rb
|
122
|
-
- spec/opensrs/xml_processor/libxml_spec.rb
|
123
|
-
- spec/opensrs/xml_processor/nokogiri_spec.rb
|
124
|
-
- spec/spec_helper.rb
|
125
136
|
homepage: https://github.com/voxxit/opensrs
|
126
137
|
licenses:
|
127
138
|
- MIT
|
@@ -146,9 +157,4 @@ rubygems_version: 2.4.5
|
|
146
157
|
signing_key:
|
147
158
|
specification_version: 4
|
148
159
|
summary: OpenSRS API for Ruby
|
149
|
-
test_files:
|
150
|
-
- spec/opensrs/server_spec.rb
|
151
|
-
- spec/opensrs/version_spec.rb
|
152
|
-
- spec/opensrs/xml_processor/libxml_spec.rb
|
153
|
-
- spec/opensrs/xml_processor/nokogiri_spec.rb
|
154
|
-
- spec/spec_helper.rb
|
160
|
+
test_files: []
|
data/spec/opensrs/server_spec.rb
DELETED
@@ -1,139 +0,0 @@
|
|
1
|
-
describe OpenSRS::Server do
|
2
|
-
let(:server) { OpenSRS::Server.new }
|
3
|
-
|
4
|
-
describe '#new' do
|
5
|
-
it 'allows timeouts to be set' do
|
6
|
-
server = OpenSRS::Server.new({ :timeout => 90 })
|
7
|
-
server.timeout.should == 90
|
8
|
-
server.open_timeout.should be_nil
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'allows open timeouts to be set' do
|
12
|
-
server = OpenSRS::Server.new({ :timeout => 90, :open_timeout => 10 })
|
13
|
-
server.timeout.should eq(90)
|
14
|
-
server.open_timeout.should eq(10)
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'leaves it up to Net::HTTP if no timeouts given' do
|
18
|
-
server.timeout.should be_nil
|
19
|
-
server.open_timeout.should be_nil
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'allows a logger to be set during initialization' do
|
23
|
-
logger = double(:info => '')
|
24
|
-
server = OpenSRS::Server.new({ :logger => logger })
|
25
|
-
server.logger.should eq(logger)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe ".call" do
|
30
|
-
let(:response) { double(:body => 'some response') }
|
31
|
-
let(:header) { {"some" => "header" } }
|
32
|
-
let(:xml) { '<some xml></some xml>' }
|
33
|
-
let(:response_xml) { xml }
|
34
|
-
let(:xml_processor) { double OpenSRS::XmlProcessor }
|
35
|
-
let(:http) { double(Net::HTTP, :use_ssl= => true, :verify_mode= => true) }
|
36
|
-
|
37
|
-
before :each do
|
38
|
-
server.stub(:headers).and_return header
|
39
|
-
xml_processor.stub(:build).and_return xml
|
40
|
-
xml_processor.stub(:parse).and_return response_xml
|
41
|
-
server.stub(:xml_processor).and_return xml_processor
|
42
|
-
http.stub(:post).and_return response
|
43
|
-
Net::HTTP.stub(:new).and_return http
|
44
|
-
end
|
45
|
-
|
46
|
-
it "builds XML request" do
|
47
|
-
xml_processor.should_receive(:build).with(:protocol => "XCP", :some => 'option')
|
48
|
-
server.call(:some => 'option')
|
49
|
-
end
|
50
|
-
|
51
|
-
it "posts to given path" do
|
52
|
-
server.server = URI.parse 'http://with-path.com/endpoint'
|
53
|
-
http.should_receive(:post).with('/endpoint', xml, header).and_return double.as_null_object
|
54
|
-
server.call
|
55
|
-
end
|
56
|
-
|
57
|
-
it "parses the response" do
|
58
|
-
xml_processor.should_receive(:parse).with(response.body)
|
59
|
-
server.call(:some => 'option')
|
60
|
-
end
|
61
|
-
|
62
|
-
it "posts to root path" do
|
63
|
-
server.server = URI.parse 'http://root-path.com/'
|
64
|
-
http.should_receive(:post).with('/', xml, header).and_return double.as_null_object
|
65
|
-
server.call
|
66
|
-
end
|
67
|
-
|
68
|
-
it "defaults path to '/'" do
|
69
|
-
server.server = URI.parse 'http://no-path.com'
|
70
|
-
http.should_receive(:post).with('/', xml, header).and_return double.as_null_object
|
71
|
-
server.call
|
72
|
-
end
|
73
|
-
|
74
|
-
it 'allows overriding of default (Net:HTTP) timeouts' do
|
75
|
-
server.timeout = 90
|
76
|
-
|
77
|
-
http.should_receive(:open_timeout=).with(90)
|
78
|
-
http.should_receive(:read_timeout=).with(90)
|
79
|
-
|
80
|
-
server.call( { :some => 'data' } )
|
81
|
-
end
|
82
|
-
|
83
|
-
it 'allows overriding of default (Net:HTTP) timeouts' do
|
84
|
-
server.timeout = 180
|
85
|
-
server.open_timeout = 30
|
86
|
-
|
87
|
-
http.should_receive(:read_timeout=).with(180)
|
88
|
-
http.should_receive(:open_timeout=).with(180)
|
89
|
-
http.should_receive(:open_timeout=).with(30)
|
90
|
-
|
91
|
-
server.call( { :some => 'data' } )
|
92
|
-
end
|
93
|
-
|
94
|
-
it 're-raises Net:HTTP timeouts' do
|
95
|
-
http.should_receive(:post).and_raise err = Timeout::Error.new('test')
|
96
|
-
expect { server.call }.to raise_exception OpenSRS::TimeoutError
|
97
|
-
end
|
98
|
-
|
99
|
-
it 'wraps connection errors' do
|
100
|
-
http.should_receive(:post).and_raise err = Errno::ECONNREFUSED
|
101
|
-
expect { server.call }.to raise_exception OpenSRS::ConnectionError
|
102
|
-
|
103
|
-
http.should_receive(:post).and_raise err = Errno::ECONNRESET
|
104
|
-
expect { server.call }.to raise_exception OpenSRS::ConnectionError
|
105
|
-
end
|
106
|
-
|
107
|
-
describe "logger is present" do
|
108
|
-
let(:logger) { OpenSRS::TestLogger.new }
|
109
|
-
before :each do
|
110
|
-
server.logger = logger
|
111
|
-
end
|
112
|
-
|
113
|
-
it "should log the request and the response" do
|
114
|
-
xml_processor.should_receive(:build).with(:protocol => "XCP", :some => 'option')
|
115
|
-
server.call(:some => 'option')
|
116
|
-
logger.messages.length.should eq(2)
|
117
|
-
logger.messages.first.should match(/\[OpenSRS\] Request XML/)
|
118
|
-
logger.messages.first.should match(/<some xml>/)
|
119
|
-
logger.messages.last.should match(/\[OpenSRS\] Response XML/)
|
120
|
-
logger.messages.last.should match(/some response/)
|
121
|
-
end
|
122
|
-
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
describe "#test xml processor" do
|
127
|
-
context "on class initialization" do
|
128
|
-
it { server.xml_processor.should eql(OpenSRS::XmlProcessor::Libxml) }
|
129
|
-
end
|
130
|
-
|
131
|
-
context "on changing xml processor" do
|
132
|
-
before(:each) do
|
133
|
-
OpenSRS::Server.xml_processor = :nokogiri
|
134
|
-
end
|
135
|
-
|
136
|
-
it { server.xml_processor.should eql(OpenSRS::XmlProcessor::Nokogiri) }
|
137
|
-
end
|
138
|
-
end
|
139
|
-
end
|
@@ -1,253 +0,0 @@
|
|
1
|
-
require 'date'
|
2
|
-
|
3
|
-
describe OpenSRS::XmlProcessor::Libxml do
|
4
|
-
describe ".build" do
|
5
|
-
it "should create XML for a nested hash" do
|
6
|
-
attributes = {:foo => {:bar => 'baz'}}
|
7
|
-
xml = OpenSRS::XmlProcessor::Libxml.build(attributes)
|
8
|
-
xml.should eq %{<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<OPS_envelope>\n <header>\n <version>0.9</version>\n </header>\n <body>\n <data_block>\n <dt_assoc>\n <item key=\"foo\">\n <dt_assoc>\n <item key=\"bar\">baz</item>\n </dt_assoc>\n </item>\n </dt_assoc>\n </data_block>\n </body>\n</OPS_envelope>\n}
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
describe '.encode_data' do
|
13
|
-
context "on a 3 element array" do
|
14
|
-
before(:each) do
|
15
|
-
@e = OpenSRS::XmlProcessor::Libxml.encode_data([1,2,3])
|
16
|
-
end
|
17
|
-
|
18
|
-
it "is a REXML::Element" do
|
19
|
-
@e.should be_an_instance_of(LibXML::XML::Node)
|
20
|
-
end
|
21
|
-
|
22
|
-
it "is a dt_array" do
|
23
|
-
@e.name.should == 'dt_array'
|
24
|
-
end
|
25
|
-
|
26
|
-
it "has 3 children all called <item>" do
|
27
|
-
@e.should have(3).children
|
28
|
-
@e.children[0].name.should == "item"
|
29
|
-
@e.children[1].name.should == "item"
|
30
|
-
@e.children[2].name.should == "item"
|
31
|
-
end
|
32
|
-
|
33
|
-
it "has children with keys 0, 1 and 2" do
|
34
|
-
@e.children[0].attributes["key"].should == "0"
|
35
|
-
@e.children[1].attributes["key"].should == "1"
|
36
|
-
@e.children[2].attributes["key"].should == "2"
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
context "on a hash" do
|
41
|
-
before(:each) do
|
42
|
-
@e = OpenSRS::XmlProcessor::Libxml.encode_data({:name => "kitteh"})
|
43
|
-
end
|
44
|
-
|
45
|
-
it "is a REXML::Element" do
|
46
|
-
@e.should be_an_instance_of(LibXML::XML::Node)
|
47
|
-
end
|
48
|
-
|
49
|
-
it "is a dt_assoc" do
|
50
|
-
@e.name.should == 'dt_assoc'
|
51
|
-
end
|
52
|
-
|
53
|
-
it "has an <item> child with the right key" do
|
54
|
-
@e.should have(1).children
|
55
|
-
@e.children[0].name.should == 'item'
|
56
|
-
@e.children[0].attributes["key"].should == 'name'
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
context "on a nested hash" do
|
61
|
-
before(:each) do
|
62
|
-
@e = OpenSRS::XmlProcessor::Libxml.encode_data({:suggestion => {:maximum => "10"}})
|
63
|
-
end
|
64
|
-
|
65
|
-
it "is a REXML::Element" do
|
66
|
-
@e.should be_an_instance_of(LibXML::XML::Node)
|
67
|
-
end
|
68
|
-
|
69
|
-
it "is a dt_assoc" do
|
70
|
-
@e.name.should == 'dt_assoc'
|
71
|
-
end
|
72
|
-
|
73
|
-
it "has an <item> child with the correct children" do
|
74
|
-
@e.should have(1).children
|
75
|
-
suggestion = @e.children[0]
|
76
|
-
suggestion.name.should == 'item'
|
77
|
-
suggestion.attributes["key"].should == 'suggestion'
|
78
|
-
|
79
|
-
suggestion.should have(1).children
|
80
|
-
dt_assoc = suggestion.children[0]
|
81
|
-
dt_assoc.name.should == 'dt_assoc'
|
82
|
-
|
83
|
-
dt_assoc.should have(1).children
|
84
|
-
maximum = dt_assoc.children[0]
|
85
|
-
maximum.name.should == 'item'
|
86
|
-
maximum.attributes["key"].should == 'maximum'
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
context "produces a scalar" do
|
91
|
-
it "from a string" do
|
92
|
-
OpenSRS::XmlProcessor::Libxml.encode_data("cheezburger").to_s.should == "cheezburger"
|
93
|
-
end
|
94
|
-
|
95
|
-
it "from a string with XML characters" do
|
96
|
-
OpenSRS::XmlProcessor::Libxml.encode_data("<smile>").to_s.should == "<smile>"
|
97
|
-
end
|
98
|
-
|
99
|
-
it "from an integer" do
|
100
|
-
OpenSRS::XmlProcessor::Libxml.encode_data(12345).to_s.should == "12345"
|
101
|
-
end
|
102
|
-
|
103
|
-
it "from a date" do
|
104
|
-
date = Date.parse("2010/02/12")
|
105
|
-
OpenSRS::XmlProcessor::Libxml.encode_data(date).to_s.should == "2010-02-12"
|
106
|
-
end
|
107
|
-
|
108
|
-
it "from a symbol" do
|
109
|
-
OpenSRS::XmlProcessor::Libxml.encode_data(:name).to_s.should == "name"
|
110
|
-
end
|
111
|
-
|
112
|
-
it "from true or false" do
|
113
|
-
OpenSRS::XmlProcessor::Libxml.encode_data(true).to_s.should == "true"
|
114
|
-
OpenSRS::XmlProcessor::Libxml.encode_data(false).to_s.should == "false"
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
describe '.parse' do
|
120
|
-
it "should handle scalar values" do
|
121
|
-
xml = %{<?xml version='1.0' encoding='UTF-8' standalone='no' ?>
|
122
|
-
<!DOCTYPE OPS_envelope SYSTEM 'ops.dtd'>
|
123
|
-
<OPS_envelope>
|
124
|
-
<header>
|
125
|
-
<version>1.0</version>
|
126
|
-
</header>
|
127
|
-
<body>
|
128
|
-
<data_block>
|
129
|
-
<dt_scalar>Tom Jones</dt_scalar>
|
130
|
-
</data_block>
|
131
|
-
</body>
|
132
|
-
</OPS_envelope>}
|
133
|
-
|
134
|
-
resp = OpenSRS::XmlProcessor::Libxml.parse(xml)
|
135
|
-
resp.should == "Tom Jones"
|
136
|
-
end
|
137
|
-
|
138
|
-
it "should handle associate arrays with arrays of values" do
|
139
|
-
xml = %{<?xml version='1.0' encoding='UTF-8' standalone='no' ?>
|
140
|
-
<!DOCTYPE OPS_envelope SYSTEM 'ops.dtd'>
|
141
|
-
<OPS_envelope>
|
142
|
-
<header>
|
143
|
-
<version>1.0</version>
|
144
|
-
</header>
|
145
|
-
<body>
|
146
|
-
<data_block>
|
147
|
-
<dt_assoc>
|
148
|
-
<item key='domain_list'>
|
149
|
-
<dt_array>
|
150
|
-
<item key='0'>ns1.example.com</item>
|
151
|
-
<item key='1'>ns2.example.com</item>
|
152
|
-
<item key='2'>ns3.example.com</item>
|
153
|
-
</dt_array>
|
154
|
-
</item>
|
155
|
-
</dt_assoc>
|
156
|
-
</data_block>
|
157
|
-
</body>
|
158
|
-
</OPS_envelope>}
|
159
|
-
|
160
|
-
resp = OpenSRS::XmlProcessor::Libxml.parse(xml)
|
161
|
-
resp["domain_list"].class.should == Array
|
162
|
-
resp["domain_list"][0].should == "ns1.example.com"
|
163
|
-
resp["domain_list"][1].should == "ns2.example.com"
|
164
|
-
resp["domain_list"][2].should == "ns3.example.com"
|
165
|
-
end
|
166
|
-
|
167
|
-
it "should handle associative arrays containing other associative arrays" do
|
168
|
-
xml = %{<?xml version='1.0' encoding='UTF-8' standalone='no' ?>
|
169
|
-
<!DOCTYPE OPS_envelope SYSTEM 'ops.dtd'>
|
170
|
-
<OPS_envelope>
|
171
|
-
<header>
|
172
|
-
<version>1.0</version>
|
173
|
-
</header>
|
174
|
-
<body>
|
175
|
-
<data_block>
|
176
|
-
<dt_assoc>
|
177
|
-
<item key="contact_set">
|
178
|
-
<dt_assoc>
|
179
|
-
<item key='owner'>
|
180
|
-
<dt_assoc>
|
181
|
-
<item key='first_name'>Tom</item>
|
182
|
-
<item key='last_name'>Jones</item>
|
183
|
-
</dt_assoc>
|
184
|
-
</item>
|
185
|
-
<item key='tech'>
|
186
|
-
<dt_assoc>
|
187
|
-
<item key='first_name'>Anne</item>
|
188
|
-
<item key='last_name'>Smith</item>
|
189
|
-
</dt_assoc>
|
190
|
-
</item>
|
191
|
-
</dt_assoc>
|
192
|
-
</item>
|
193
|
-
</dt_assoc>
|
194
|
-
</data_block>
|
195
|
-
</body>
|
196
|
-
</OPS_envelope>}
|
197
|
-
|
198
|
-
resp = OpenSRS::XmlProcessor::Libxml.parse(xml)
|
199
|
-
|
200
|
-
resp["contact_set"]["owner"]["first_name"].should == "Tom"
|
201
|
-
resp["contact_set"]["owner"]["last_name"].should == "Jones"
|
202
|
-
resp["contact_set"]["tech"]["first_name"].should == "Anne"
|
203
|
-
resp["contact_set"]["tech"]["last_name"].should == "Smith"
|
204
|
-
end
|
205
|
-
|
206
|
-
context "with a balance enquiry example response" do
|
207
|
-
before(:each) do
|
208
|
-
xml = %{<?xml version='1.0' encoding='UTF-8' standalone='no' ?>
|
209
|
-
<!DOCTYPE OPS_envelope SYSTEM 'ops.dtd'>
|
210
|
-
<OPS_envelope>
|
211
|
-
<header>
|
212
|
-
<version>0.9</version>
|
213
|
-
</header>
|
214
|
-
<body>
|
215
|
-
<data_block>
|
216
|
-
<dt_assoc>
|
217
|
-
<item key="protocol">XCP</item>
|
218
|
-
<item key="action">REPLY</item>
|
219
|
-
<item key="object">BALANCE</item>
|
220
|
-
<item key="is_success">1</item>
|
221
|
-
<item key="response_code">200</item>
|
222
|
-
<item key="response_text">Command successful</item>
|
223
|
-
<item key="attributes">
|
224
|
-
<dt_assoc>
|
225
|
-
<item key="balance">8549.18</item>
|
226
|
-
<item key="hold_balance">1676.05</item>
|
227
|
-
</dt_assoc>
|
228
|
-
</item>
|
229
|
-
</dt_assoc>
|
230
|
-
</data_block>
|
231
|
-
</body>
|
232
|
-
</OPS_envelope>}
|
233
|
-
|
234
|
-
@resp = OpenSRS::XmlProcessor::Libxml.parse(xml)
|
235
|
-
end
|
236
|
-
|
237
|
-
it "produces a hash" do
|
238
|
-
@resp.should be_an_instance_of(Hash)
|
239
|
-
end
|
240
|
-
|
241
|
-
it "has top level keys" do
|
242
|
-
@resp["protocol"].should == "XCP"
|
243
|
-
@resp["action"].should == "REPLY"
|
244
|
-
@resp["object"].should == "BALANCE"
|
245
|
-
end
|
246
|
-
|
247
|
-
it "has second level keys" do
|
248
|
-
@resp["attributes"]["balance"].should == "8549.18"
|
249
|
-
@resp["attributes"]["hold_balance"].should == "1676.05"
|
250
|
-
end
|
251
|
-
end
|
252
|
-
end
|
253
|
-
end
|
@@ -1,246 +0,0 @@
|
|
1
|
-
require 'date'
|
2
|
-
|
3
|
-
class OrderedHash < Hash
|
4
|
-
end
|
5
|
-
|
6
|
-
describe OpenSRS::XmlProcessor::Nokogiri do
|
7
|
-
describe ".build" do
|
8
|
-
it "should create XML for a nested hash" do
|
9
|
-
attributes = {:foo => {:bar => 'baz'}}
|
10
|
-
xml = OpenSRS::XmlProcessor::Nokogiri.build(attributes)
|
11
|
-
xml.should eq %{<?xml version=\"1.0\"?>\n<OPS_envelope>\n <header>\n <version>0.9</version>\n </header>\n <body>\n <data_block>\n <dt_assoc>\n <item key=\"foo\">\n <dt_assoc>\n <item key=\"bar\">baz</item>\n </dt_assoc>\n </item>\n </dt_assoc>\n </data_block>\n </body>\n</OPS_envelope>\n}
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe '.encode_data' do
|
16
|
-
|
17
|
-
before(:each) do
|
18
|
-
@builder = ::Nokogiri::XML::Builder.new
|
19
|
-
@doc = @builder.doc
|
20
|
-
end
|
21
|
-
|
22
|
-
context "on a 3 element array" do
|
23
|
-
before(:each) do
|
24
|
-
@e = OpenSRS::XmlProcessor::Nokogiri.encode_data([1,2,3], @doc)
|
25
|
-
end
|
26
|
-
|
27
|
-
it { @e.should be_an_instance_of(::Nokogiri::XML::Element) }
|
28
|
-
it { @e.name.should eql('dt_array') }
|
29
|
-
|
30
|
-
it { @e.should have(3).children }
|
31
|
-
it { @e.children[0].name.should eql("item") }
|
32
|
-
it { @e.children[1].name.should eql("item") }
|
33
|
-
it { @e.children[2].name.should eql("item") }
|
34
|
-
|
35
|
-
it { @e.children[0].attributes["key"].value.should eql("0") }
|
36
|
-
it { @e.children[1].attributes["key"].value.should eql("1") }
|
37
|
-
it { @e.children[2].attributes["key"].value.should eql("2") }
|
38
|
-
end
|
39
|
-
|
40
|
-
context "on a hash" do
|
41
|
-
before(:each) do
|
42
|
-
@e = OpenSRS::XmlProcessor::Nokogiri.encode_data({:name => "kitteh"}, @doc)
|
43
|
-
end
|
44
|
-
|
45
|
-
it { @e.should be_an_instance_of(::Nokogiri::XML::Element) }
|
46
|
-
it { @e.name.should eql('dt_assoc') }
|
47
|
-
|
48
|
-
it { @e.should have(1).children }
|
49
|
-
it { @e.children[0].name.should eql('item') }
|
50
|
-
it { @e.children[0].attributes["key"].value.should eql('name') }
|
51
|
-
end
|
52
|
-
|
53
|
-
context "on a hash subclass" do
|
54
|
-
before(:each) do
|
55
|
-
ohash = OrderedHash.new
|
56
|
-
ohash[:name] = 'kitten'
|
57
|
-
@e = OpenSRS::XmlProcessor::Nokogiri.encode_data(ohash, @doc)
|
58
|
-
end
|
59
|
-
|
60
|
-
it { @e.should be_an_instance_of(::Nokogiri::XML::Element) }
|
61
|
-
it { @e.name.should eql('dt_assoc') }
|
62
|
-
|
63
|
-
it { @e.should have(1).children }
|
64
|
-
it { @e.children[0].name.should eql('item') }
|
65
|
-
it { @e.children[0].attributes["key"].value.should eql('name') }
|
66
|
-
end
|
67
|
-
|
68
|
-
|
69
|
-
context "on a nested hash" do
|
70
|
-
before(:each) do
|
71
|
-
@e = OpenSRS::XmlProcessor::Nokogiri.encode_data({:suggestion => {:maximum => "10"}}, @doc)
|
72
|
-
@suggestion = @e.children[0]
|
73
|
-
@dt_assoc = @suggestion.children[0]
|
74
|
-
end
|
75
|
-
|
76
|
-
it { @e.should be_an_instance_of(::Nokogiri::XML::Element) }
|
77
|
-
it { @e.name.should == 'dt_assoc' }
|
78
|
-
|
79
|
-
context "<item> child" do
|
80
|
-
it { @e.should have(1).children }
|
81
|
-
it { @suggestion.name.should eql('item') }
|
82
|
-
it { @suggestion.attributes["key"].value.should eql('suggestion') }
|
83
|
-
end
|
84
|
-
|
85
|
-
context "suggesion children" do
|
86
|
-
it { @suggestion.should have(1).children }
|
87
|
-
it { @dt_assoc.name.should eql('dt_assoc') }
|
88
|
-
end
|
89
|
-
|
90
|
-
context "dt_assoc children" do
|
91
|
-
before(:each) do
|
92
|
-
@maximum = @dt_assoc.children[0]
|
93
|
-
end
|
94
|
-
it { @dt_assoc.should have(1).children }
|
95
|
-
it { @maximum.name.should eql('item') }
|
96
|
-
it { @maximum.attributes["key"].value.should eql('maximum') }
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
context "produces a scalar" do
|
101
|
-
it { OpenSRS::XmlProcessor::Nokogiri.encode_data("cheezburger").to_s.should eql("cheezburger") }
|
102
|
-
it { OpenSRS::XmlProcessor::Nokogiri.encode_data("<smile>").to_s.should eql("<smile>") }
|
103
|
-
|
104
|
-
it { OpenSRS::XmlProcessor::Nokogiri.encode_data(12345).to_s.should eql("12345") }
|
105
|
-
it { OpenSRS::XmlProcessor::Nokogiri.encode_data(Date.parse("2010/02/12")).to_s.should eql("2010-02-12") }
|
106
|
-
it { OpenSRS::XmlProcessor::Nokogiri.encode_data(:name).to_s.should eql("name") }
|
107
|
-
it { OpenSRS::XmlProcessor::Nokogiri.encode_data(true).to_s.should eql("true") }
|
108
|
-
it { OpenSRS::XmlProcessor::Nokogiri.encode_data(false).to_s.should eql("false") }
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
describe '.parse' do
|
113
|
-
|
114
|
-
context "when scaler values" do
|
115
|
-
before(:each) do
|
116
|
-
xml = %{<?xml version='1.0' encoding='UTF-8' standalone='no' ?>
|
117
|
-
<!DOCTYPE OPS_envelope SYSTEM 'ops.dtd'>
|
118
|
-
<OPS_envelope>
|
119
|
-
<header>
|
120
|
-
<version>1.0</version>
|
121
|
-
</header>
|
122
|
-
<body>
|
123
|
-
<data_block>
|
124
|
-
<dt_scalar>Tom Jones</dt_scalar>
|
125
|
-
</data_block>
|
126
|
-
</body>
|
127
|
-
</OPS_envelope>}
|
128
|
-
@response = OpenSRS::XmlProcessor::Nokogiri.parse(xml)
|
129
|
-
end
|
130
|
-
|
131
|
-
it { @response.should eql("Tom Jones") }
|
132
|
-
end
|
133
|
-
|
134
|
-
context "when associative arrays with arrays of values" do
|
135
|
-
before(:each) do
|
136
|
-
xml = %{<?xml version='1.0' encoding='UTF-8' standalone='no' ?>
|
137
|
-
<!DOCTYPE OPS_envelope SYSTEM 'ops.dtd'>
|
138
|
-
<OPS_envelope>
|
139
|
-
<header>
|
140
|
-
<version>1.0</version>
|
141
|
-
</header>
|
142
|
-
<body>
|
143
|
-
<data_block>
|
144
|
-
<dt_assoc>
|
145
|
-
<item key='domain_list'>
|
146
|
-
<dt_array>
|
147
|
-
<item key='0'>ns1.example.com</item>
|
148
|
-
<item key='1'>ns2.example.com</item>
|
149
|
-
<item key='2'>ns3.example.com</item>
|
150
|
-
</dt_array>
|
151
|
-
</item>
|
152
|
-
</dt_assoc>
|
153
|
-
</data_block>
|
154
|
-
</body>
|
155
|
-
</OPS_envelope>}
|
156
|
-
|
157
|
-
@response = OpenSRS::XmlProcessor::Nokogiri.parse(xml)
|
158
|
-
end
|
159
|
-
|
160
|
-
it { @response["domain_list"].class.should eql(Array) }
|
161
|
-
it { @response["domain_list"][0].should eql("ns1.example.com") }
|
162
|
-
it { @response["domain_list"][1].should eql("ns2.example.com") }
|
163
|
-
it { @response["domain_list"][2].should eql("ns3.example.com") }
|
164
|
-
end
|
165
|
-
|
166
|
-
context "when associative arrays containing other associative arrays" do
|
167
|
-
before(:each) do
|
168
|
-
xml = %{<?xml version='1.0' encoding='UTF-8' standalone='no' ?>
|
169
|
-
<!DOCTYPE OPS_envelope SYSTEM 'ops.dtd'>
|
170
|
-
<OPS_envelope>
|
171
|
-
<header>
|
172
|
-
<version>1.0</version>
|
173
|
-
</header>
|
174
|
-
<body>
|
175
|
-
<data_block>
|
176
|
-
<dt_assoc>
|
177
|
-
<item key="contact_set">
|
178
|
-
<dt_assoc>
|
179
|
-
<item key='owner'>
|
180
|
-
<dt_assoc>
|
181
|
-
<item key='first_name'>Tom</item>
|
182
|
-
<item key='last_name'>Jones</item>
|
183
|
-
</dt_assoc>
|
184
|
-
</item>
|
185
|
-
<item key='tech'>
|
186
|
-
<dt_assoc>
|
187
|
-
<item key='first_name'>Anne</item>
|
188
|
-
<item key='last_name'>Smith</item>
|
189
|
-
</dt_assoc>
|
190
|
-
</item>
|
191
|
-
</dt_assoc>
|
192
|
-
</item>
|
193
|
-
</dt_assoc>
|
194
|
-
</data_block>
|
195
|
-
</body>
|
196
|
-
</OPS_envelope>}
|
197
|
-
|
198
|
-
@response = OpenSRS::XmlProcessor::Nokogiri.parse(xml)
|
199
|
-
end
|
200
|
-
it { @response["contact_set"]["owner"]["first_name"].should eql("Tom") }
|
201
|
-
it { @response["contact_set"]["owner"]["last_name"].should eql("Jones") }
|
202
|
-
it { @response["contact_set"]["tech"]["first_name"].should eql("Anne") }
|
203
|
-
it { @response["contact_set"]["tech"]["last_name"].should eql("Smith") }
|
204
|
-
end
|
205
|
-
|
206
|
-
context "with a balance enquiry example response" do
|
207
|
-
before(:each) do
|
208
|
-
xml = %{<?xml version='1.0' encoding='UTF-8' standalone='no' ?>
|
209
|
-
<!DOCTYPE OPS_envelope SYSTEM 'ops.dtd'>
|
210
|
-
<OPS_envelope>
|
211
|
-
<header>
|
212
|
-
<version>0.9</version>
|
213
|
-
</header>
|
214
|
-
<body>
|
215
|
-
<data_block>
|
216
|
-
<dt_assoc>
|
217
|
-
<item key="protocol">XCP</item>
|
218
|
-
<item key="action">REPLY</item>
|
219
|
-
<item key="object">BALANCE</item>
|
220
|
-
<item key="is_success">1</item>
|
221
|
-
<item key="response_code">200</item>
|
222
|
-
<item key="response_text">Command successful</item>
|
223
|
-
<item key="attributes">
|
224
|
-
<dt_assoc>
|
225
|
-
<item key="balance">8549.18</item>
|
226
|
-
<item key="hold_balance">1676.05</item>
|
227
|
-
</dt_assoc>
|
228
|
-
</item>
|
229
|
-
</dt_assoc>
|
230
|
-
</data_block>
|
231
|
-
</body>
|
232
|
-
</OPS_envelope>}
|
233
|
-
|
234
|
-
@response = OpenSRS::XmlProcessor::Nokogiri.parse(xml)
|
235
|
-
end
|
236
|
-
|
237
|
-
it { @response.should be_an_instance_of(Hash) }
|
238
|
-
it { @response["protocol"].should eql("XCP") }
|
239
|
-
it { @response["action"].should eql("REPLY") }
|
240
|
-
it { @response["object"].should eql("BALANCE") }
|
241
|
-
it { @response["attributes"]["balance"].should eql("8549.18") }
|
242
|
-
it { @response["attributes"]["hold_balance"].should eql("1676.05") }
|
243
|
-
|
244
|
-
end
|
245
|
-
end
|
246
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'bundler/setup'
|
2
|
-
|
3
|
-
Bundler.setup
|
4
|
-
|
5
|
-
require 'opensrs'
|
6
|
-
|
7
|
-
RSpec.configure do |config|
|
8
|
-
# config for rspec!
|
9
|
-
end
|
10
|
-
|
11
|
-
class OpenSRS::TestLogger
|
12
|
-
|
13
|
-
attr_reader :messages
|
14
|
-
|
15
|
-
def initialize
|
16
|
-
@messages = []
|
17
|
-
end
|
18
|
-
|
19
|
-
def info(message)
|
20
|
-
messages << message
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|