glennr_opensrs 0.3.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,228 @@
1
+ require 'spec_helper'
2
+ require 'date'
3
+
4
+ describe OpenSRS::XmlProcessor::Nokogiri do
5
+ describe ".build" do
6
+ it "should create XML for a nested hash" do
7
+ attributes = {:foo => {:bar => 'baz'}}
8
+ xml = OpenSRS::XmlProcessor::Nokogiri.build(attributes)
9
+ 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}
10
+ end
11
+ end
12
+
13
+ describe '.encode_data' do
14
+
15
+ before(:each) do
16
+ @builder = ::Nokogiri::XML::Builder.new
17
+ @doc = @builder.doc
18
+ end
19
+
20
+ context "on a 3 element array" do
21
+ before(:each) do
22
+ @e = OpenSRS::XmlProcessor::Nokogiri.encode_data([1,2,3], @doc)
23
+ end
24
+
25
+ it { @e.should be_an_instance_of(::Nokogiri::XML::Element) }
26
+ it { @e.name.should eql('dt_array') }
27
+
28
+ it { @e.should have(3).children }
29
+ it { @e.children[0].name.should eql("item") }
30
+ it { @e.children[1].name.should eql("item") }
31
+ it { @e.children[2].name.should eql("item") }
32
+
33
+ it { @e.children[0].attributes["key"].value.should eql("0") }
34
+ it { @e.children[1].attributes["key"].value.should eql("1") }
35
+ it { @e.children[2].attributes["key"].value.should eql("2") }
36
+ end
37
+
38
+ context "on a hash" do
39
+ before(:each) do
40
+ @e = OpenSRS::XmlProcessor::Nokogiri.encode_data({:name => "kitteh"}, @doc)
41
+ end
42
+
43
+ it { @e.should be_an_instance_of(::Nokogiri::XML::Element) }
44
+ it { @e.name.should eql('dt_assoc') }
45
+
46
+ it { @e.should have(1).children }
47
+ it { @e.children[0].name.should eql('item') }
48
+ it { @e.children[0].attributes["key"].value.should eql('name') }
49
+ end
50
+
51
+ context "on a nested hash" do
52
+ before(:each) do
53
+ @e = OpenSRS::XmlProcessor::Nokogiri.encode_data({:suggestion => {:maximum => "10"}}, @doc)
54
+ @suggestion = @e.children[0]
55
+ @dt_assoc = @suggestion.children[0]
56
+ end
57
+
58
+ it { @e.should be_an_instance_of(::Nokogiri::XML::Element) }
59
+ it { @e.name.should == 'dt_assoc' }
60
+
61
+ context "<item> child" do
62
+ it { @e.should have(1).children }
63
+ it { @suggestion.name.should eql('item') }
64
+ it { @suggestion.attributes["key"].value.should eql('suggestion') }
65
+ end
66
+
67
+ context "suggesion children" do
68
+ it { @suggestion.should have(1).children }
69
+ it { @dt_assoc.name.should eql('dt_assoc') }
70
+ end
71
+
72
+ context "dt_assoc children" do
73
+ before(:each) do
74
+ @maximum = @dt_assoc.children[0]
75
+ end
76
+ it { @dt_assoc.should have(1).children }
77
+ it { @maximum.name.should eql('item') }
78
+ it { @maximum.attributes["key"].value.should eql('maximum') }
79
+ end
80
+ end
81
+
82
+ context "produces a scalar" do
83
+ it { OpenSRS::XmlProcessor::Nokogiri.encode_data("cheezburger").to_s.should eql("cheezburger") }
84
+ it { OpenSRS::XmlProcessor::Nokogiri.encode_data("<smile>").to_s.should eql("<smile>") }
85
+
86
+ it { OpenSRS::XmlProcessor::Nokogiri.encode_data(12345).to_s.should eql("12345") }
87
+ it { OpenSRS::XmlProcessor::Nokogiri.encode_data(Date.parse("2010/02/12")).to_s.should eql("2010-02-12") }
88
+ it { OpenSRS::XmlProcessor::Nokogiri.encode_data(:name).to_s.should eql("name") }
89
+ it { OpenSRS::XmlProcessor::Nokogiri.encode_data(true).to_s.should eql("true") }
90
+ it { OpenSRS::XmlProcessor::Nokogiri.encode_data(false).to_s.should eql("false") }
91
+ end
92
+ end
93
+
94
+ describe '.parse' do
95
+
96
+ context "when scaler values" do
97
+ before(:each) do
98
+ xml = %{<?xml version='1.0' encoding='UTF-8' standalone='no' ?>
99
+ <!DOCTYPE OPS_envelope SYSTEM 'ops.dtd'>
100
+ <OPS_envelope>
101
+ <header>
102
+ <version>1.0</version>
103
+ </header>
104
+ <body>
105
+ <data_block>
106
+ <dt_scalar>Tom Jones</dt_scalar>
107
+ </data_block>
108
+ </body>
109
+ </OPS_envelope>}
110
+ @response = OpenSRS::XmlProcessor::Nokogiri.parse(xml)
111
+ end
112
+
113
+ it { @response.should eql("Tom Jones") }
114
+ end
115
+
116
+ context "when associative arrays with arrays of values" do
117
+ before(:each) do
118
+ xml = %{<?xml version='1.0' encoding='UTF-8' standalone='no' ?>
119
+ <!DOCTYPE OPS_envelope SYSTEM 'ops.dtd'>
120
+ <OPS_envelope>
121
+ <header>
122
+ <version>1.0</version>
123
+ </header>
124
+ <body>
125
+ <data_block>
126
+ <dt_assoc>
127
+ <item key='domain_list'>
128
+ <dt_array>
129
+ <item key='0'>ns1.example.com</item>
130
+ <item key='1'>ns2.example.com</item>
131
+ <item key='2'>ns3.example.com</item>
132
+ </dt_array>
133
+ </item>
134
+ </dt_assoc>
135
+ </data_block>
136
+ </body>
137
+ </OPS_envelope>}
138
+
139
+ @response = OpenSRS::XmlProcessor::Nokogiri.parse(xml)
140
+ end
141
+
142
+ it { @response["domain_list"].class.should eql(Array) }
143
+ it { @response["domain_list"][0].should eql("ns1.example.com") }
144
+ it { @response["domain_list"][1].should eql("ns2.example.com") }
145
+ it { @response["domain_list"][2].should eql("ns3.example.com") }
146
+ end
147
+
148
+ context "when associative arrays containing other associative arrays" do
149
+ before(:each) do
150
+ xml = %{<?xml version='1.0' encoding='UTF-8' standalone='no' ?>
151
+ <!DOCTYPE OPS_envelope SYSTEM 'ops.dtd'>
152
+ <OPS_envelope>
153
+ <header>
154
+ <version>1.0</version>
155
+ </header>
156
+ <body>
157
+ <data_block>
158
+ <dt_assoc>
159
+ <item key="contact_set">
160
+ <dt_assoc>
161
+ <item key='owner'>
162
+ <dt_assoc>
163
+ <item key='first_name'>Tom</item>
164
+ <item key='last_name'>Jones</item>
165
+ </dt_assoc>
166
+ </item>
167
+ <item key='tech'>
168
+ <dt_assoc>
169
+ <item key='first_name'>Anne</item>
170
+ <item key='last_name'>Smith</item>
171
+ </dt_assoc>
172
+ </item>
173
+ </dt_assoc>
174
+ </item>
175
+ </dt_assoc>
176
+ </data_block>
177
+ </body>
178
+ </OPS_envelope>}
179
+
180
+ @response = OpenSRS::XmlProcessor::Nokogiri.parse(xml)
181
+ end
182
+ it { @response["contact_set"]["owner"]["first_name"].should eql("Tom") }
183
+ it { @response["contact_set"]["owner"]["last_name"].should eql("Jones") }
184
+ it { @response["contact_set"]["tech"]["first_name"].should eql("Anne") }
185
+ it { @response["contact_set"]["tech"]["last_name"].should eql("Smith") }
186
+ end
187
+
188
+ context "with a balance enquiry example response" do
189
+ before(:each) do
190
+ xml = %{<?xml version='1.0' encoding='UTF-8' standalone='no' ?>
191
+ <!DOCTYPE OPS_envelope SYSTEM 'ops.dtd'>
192
+ <OPS_envelope>
193
+ <header>
194
+ <version>0.9</version>
195
+ </header>
196
+ <body>
197
+ <data_block>
198
+ <dt_assoc>
199
+ <item key="protocol">XCP</item>
200
+ <item key="action">REPLY</item>
201
+ <item key="object">BALANCE</item>
202
+ <item key="is_success">1</item>
203
+ <item key="response_code">200</item>
204
+ <item key="response_text">Command successful</item>
205
+ <item key="attributes">
206
+ <dt_assoc>
207
+ <item key="balance">8549.18</item>
208
+ <item key="hold_balance">1676.05</item>
209
+ </dt_assoc>
210
+ </item>
211
+ </dt_assoc>
212
+ </data_block>
213
+ </body>
214
+ </OPS_envelope>}
215
+
216
+ @response = OpenSRS::XmlProcessor::Nokogiri.parse(xml)
217
+ end
218
+
219
+ it { @response.should be_an_instance_of(Hash) }
220
+ it { @response["protocol"].should eql("XCP") }
221
+ it { @response["action"].should eql("REPLY") }
222
+ it { @response["object"].should eql("BALANCE") }
223
+ it { @response["attributes"]["balance"].should eql("8549.18") }
224
+ it { @response["attributes"]["hold_balance"].should eql("1676.05") }
225
+
226
+ end
227
+ end
228
+ end
@@ -0,0 +1,6 @@
1
+ require 'opensrs/xml_processor.rb'
2
+ require 'opensrs/xml_processor/libxml.rb'
3
+ require 'opensrs/xml_processor/nokogiri.rb'
4
+ require 'opensrs/server.rb'
5
+ require 'opensrs/version.rb'
6
+ require 'opensrs/response.rb'
metadata ADDED
@@ -0,0 +1,182 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: glennr_opensrs
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.3
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Josh Delsman
9
+ - Glenn Roberts
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-03-11 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: libxml-ruby
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: 2.1.2
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: 2.1.2
31
+ - !ruby/object:Gem::Dependency
32
+ name: nokogiri
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ~>
37
+ - !ruby/object:Gem::Version
38
+ version: 1.4.6
39
+ type: :development
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 1.4.6
47
+ - !ruby/object:Gem::Dependency
48
+ name: jeweler
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: git
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ type: :development
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ - !ruby/object:Gem::Dependency
80
+ name: rake
81
+ requirement: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ type: :development
88
+ prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: shoulda
97
+ requirement: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ~>
117
+ - !ruby/object:Gem::Version
118
+ version: '2.0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ~>
125
+ - !ruby/object:Gem::Version
126
+ version: '2.0'
127
+ description: Provides support to utilize the OpenSRS API with Ruby/Rails.
128
+ email: glenn@siyelo.com
129
+ executables: []
130
+ extensions: []
131
+ extra_rdoc_files:
132
+ - LICENSE
133
+ - README.rdoc
134
+ files:
135
+ - .document
136
+ - Gemfile
137
+ - Gemfile.lock
138
+ - LICENSE
139
+ - README.rdoc
140
+ - Rakefile
141
+ - lib/opensrs.rb
142
+ - lib/opensrs/response.rb
143
+ - lib/opensrs/server.rb
144
+ - lib/opensrs/version.rb
145
+ - lib/opensrs/xml_processor.rb
146
+ - lib/opensrs/xml_processor/libxml.rb
147
+ - lib/opensrs/xml_processor/nokogiri.rb
148
+ - opensrs.gemspec
149
+ - spec/opensrs/server_spec.rb
150
+ - spec/opensrs/version_spec.rb
151
+ - spec/opensrs/xml_processor/libxml_spec.rb
152
+ - spec/opensrs/xml_processor/nokogiri_spec.rb
153
+ - spec/spec_helper.rb
154
+ homepage: http://github.com/glennr/opensrs
155
+ licenses:
156
+ - MIT
157
+ post_install_message:
158
+ rdoc_options: []
159
+ require_paths:
160
+ - lib
161
+ required_ruby_version: !ruby/object:Gem::Requirement
162
+ none: false
163
+ requirements:
164
+ - - ! '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ segments:
168
+ - 0
169
+ hash: -274764561660248788
170
+ required_rubygems_version: !ruby/object:Gem::Requirement
171
+ none: false
172
+ requirements:
173
+ - - ! '>='
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ requirements: []
177
+ rubyforge_project:
178
+ rubygems_version: 1.8.23
179
+ signing_key:
180
+ specification_version: 3
181
+ summary: Provides support to utilize the OpenSRS API with Ruby/Rails.
182
+ test_files: []