gbip 0.7.1 → 0.8.0
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.
- data/CHANGELOG +8 -0
- data/Rakefile +1 -1
- data/lib/gbip.rb +4 -1
- data/lib/gbip/pos.rb +17 -9
- data/specs/pos_class_spec.rb +160 -50
- data/specs/responses/invalid_account.txt +1 -0
- data/specs/responses/invalid_bad_data.txt +1 -0
- data/specs/responses/invalid_request.txt +1 -0
- data/specs/responses/invalid_system_unavailable.txt +1 -0
- data/specs/spec_helper.rb +5 -0
- metadata +8 -6
- data/specs/mock_tcpsocket.rb +0 -44
- data/specs/timeout_tcpsocket.rb +0 -19
data/CHANGELOG
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
v0.8.0 (7th November)
|
2
|
+
- Add checks for additional error codes, and raise an appropriate error
|
3
|
+
- overhauled specs
|
4
|
+
|
5
|
+
v0.7.1 (14th October)
|
6
|
+
- Correctly parse API responses that contain a # in their data
|
7
|
+
- Use ISBN13s in queries. No change to user API (we accept ISBN10s or ISBN13s)
|
8
|
+
|
1
9
|
v0.7 (2nd October 2008)
|
2
10
|
- Moved out of the RBook namespace
|
3
11
|
- Added GBIP::Title#to_yaml
|
data/Rakefile
CHANGED
data/lib/gbip.rb
CHANGED
@@ -18,5 +18,8 @@ require 'rbook/isbn'
|
|
18
18
|
# puts gbip.find("0091835135").inspect
|
19
19
|
#
|
20
20
|
module GBIP
|
21
|
-
class
|
21
|
+
class Error < RuntimeError; end
|
22
|
+
class InvalidRequestError < Error; end
|
23
|
+
class InvalidLoginError < Error; end
|
24
|
+
class SystemUnavailableError < Error; end
|
22
25
|
end
|
data/lib/gbip/pos.rb
CHANGED
@@ -15,10 +15,9 @@ module GBIP
|
|
15
15
|
POS_PORT = 7052
|
16
16
|
|
17
17
|
# creates a new POS object ready to perform a search
|
18
|
-
def initialize(username, password
|
18
|
+
def initialize(username, password)
|
19
19
|
@username = username
|
20
20
|
@password = password
|
21
|
-
@socket_class = socket_class || TCPSocket
|
22
21
|
end
|
23
22
|
|
24
23
|
# search for the specified ISBN on globalbooksinprint.com.
|
@@ -37,7 +36,7 @@ module GBIP
|
|
37
36
|
options = {:timeout => 10}.merge(options)
|
38
37
|
|
39
38
|
isbn = RBook::ISBN.convert_to_isbn13(isbn.to_s) || isbn.to_s
|
40
|
-
return default_return
|
39
|
+
return default_return unless RBook::ISBN.valid_isbn13?(isbn)
|
41
40
|
|
42
41
|
request_format = "POS"
|
43
42
|
account_type = "3"
|
@@ -60,11 +59,25 @@ module GBIP
|
|
60
59
|
request_string << "#{version}\t#{supplier}\t#{request}\t#{filters}\t#{records}\t#{sort_order}\t"
|
61
60
|
request_string << "#{markets}\t"
|
62
61
|
|
63
|
-
sock =
|
62
|
+
sock = TCPSocket.new(POS_SERVER, POS_PORT)
|
64
63
|
sock.print request_string
|
65
64
|
response = Timeout::timeout(options[:timeout]) { sock.gets(nil) }
|
66
65
|
sock.close
|
67
66
|
|
67
|
+
# error handling
|
68
|
+
case response.to_s[0,1]
|
69
|
+
when "5"
|
70
|
+
raise GBIP::InvalidRequestError, "Unknown Account Type or Request Version"
|
71
|
+
when "6"
|
72
|
+
raise GBIP::InvalidLoginError, "Invalid username or password"
|
73
|
+
when "7"
|
74
|
+
raise GBIP::InvalidRequestError, "Bad Data"
|
75
|
+
when "8"
|
76
|
+
raise GBIP::InvalidRequestError, "Invalid Request Version"
|
77
|
+
when "9"
|
78
|
+
raise GBIP::SystemUnavailableError, "System Unavailable"
|
79
|
+
end
|
80
|
+
|
68
81
|
# split the response into header/body
|
69
82
|
idx = response.index("#")
|
70
83
|
if idx.nil?
|
@@ -86,11 +99,6 @@ module GBIP
|
|
86
99
|
#titles_arr[-1] = titles_arr.last[1,titles_arr.last.size-1]
|
87
100
|
end
|
88
101
|
|
89
|
-
# raise an exception if incorrect login details were provided
|
90
|
-
if header.first.eql?("66")
|
91
|
-
raise GBIP::InvalidLoginError, "Invalid username or password"
|
92
|
-
end
|
93
|
-
|
94
102
|
if titles_arr.size == 0
|
95
103
|
# return nil if no matching records found
|
96
104
|
return nil
|
data/specs/pos_class_spec.rb
CHANGED
@@ -1,78 +1,151 @@
|
|
1
1
|
$LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib')
|
2
2
|
|
3
3
|
require 'gbip'
|
4
|
-
require File.dirname(__FILE__) + "/
|
4
|
+
require File.dirname(__FILE__) + "/spec_helper"
|
5
5
|
require File.dirname(__FILE__) + "/timeout_tcpsocket"
|
6
6
|
|
7
7
|
context "A new POS object" do
|
8
8
|
|
9
9
|
setup do
|
10
|
-
@
|
11
|
-
@
|
12
|
-
@
|
13
|
-
@
|
14
|
-
@valid_isbn13 = "9781741146714"
|
15
|
-
@valid_isbn13_hash = "9781590599358"
|
16
|
-
@notfound_isbn10 = "0571228526"
|
17
|
-
@notfound_isbn13 = "9780571228522"
|
18
|
-
@valid_isbn10_with_no_warehouses = "0732282721"
|
10
|
+
@username = "user"
|
11
|
+
@password = "pass"
|
12
|
+
@isbn10 = "1741146712"
|
13
|
+
@isbn13 = "9781741146714"
|
19
14
|
end
|
20
15
|
|
21
16
|
#####################
|
22
17
|
# :first searches
|
23
18
|
#####################
|
19
|
+
|
20
|
+
specify "should raise an exception when an invalid request is made" do
|
21
|
+
# Mock TCPSocket to return an invalid request error code
|
22
|
+
data = File.read(File.dirname(__FILE__) + "/responses/invalid_account.txt").strip
|
23
|
+
socket = TCPSocket.stub_instance(:print => true, :close => true, :gets => data)
|
24
|
+
TCPSocket.stub_method(:new => socket)
|
25
|
+
|
26
|
+
pos = GBIP::POS.new(@username, @password)
|
27
|
+
lambda { pos.find(:first, @isbn10) }.should raise_error(GBIP::InvalidRequestError)
|
28
|
+
end
|
29
|
+
|
24
30
|
specify "should raise an exception when an invalid username or password is supplied" do
|
25
|
-
|
26
|
-
|
31
|
+
# Mock TCPSocket to return an invalid login error code
|
32
|
+
data = File.read(File.dirname(__FILE__) + "/responses/invalid_login.txt").strip
|
33
|
+
socket = TCPSocket.stub_instance(:print => true, :close => true, :gets => data)
|
34
|
+
TCPSocket.stub_method(:new => socket)
|
35
|
+
|
36
|
+
pos = GBIP::POS.new(@valid_username, @invalid_password)
|
37
|
+
lambda { pos.find(:first, @isbn10) }.should raise_error(GBIP::InvalidLoginError)
|
38
|
+
end
|
39
|
+
|
40
|
+
specify "should raise an exception when an bad data is requested" do
|
41
|
+
# Mock TCPSocket to return a bad data error code
|
42
|
+
data = File.read(File.dirname(__FILE__) + "/responses/invalid_bad_data.txt").strip
|
43
|
+
socket = TCPSocket.stub_instance(:print => true, :close => true, :gets => data)
|
44
|
+
TCPSocket.stub_method(:new => socket)
|
45
|
+
|
46
|
+
pos = GBIP::POS.new(@valid_username, @invalid_password)
|
47
|
+
lambda { pos.find(:first, @isbn10) }.should raise_error(GBIP::InvalidRequestError)
|
48
|
+
end
|
49
|
+
|
50
|
+
specify "should raise an exception when an invalid request version is used" do
|
51
|
+
# Mock TCPSocket to return an invalid request version error code
|
52
|
+
data = File.read(File.dirname(__FILE__) + "/responses/invalid_request.txt").strip
|
53
|
+
socket = TCPSocket.stub_instance(:print => true, :close => true, :gets => data)
|
54
|
+
TCPSocket.stub_method(:new => socket)
|
55
|
+
|
56
|
+
pos = GBIP::POS.new(@valid_username, @invalid_password)
|
57
|
+
lambda { pos.find(:first, @isbn10) }.should raise_error(GBIP::InvalidRequestError)
|
58
|
+
end
|
59
|
+
|
60
|
+
specify "should raise an exception when a the GBIP API system is unavailable" do
|
61
|
+
# Mock TCPSocket to return a system unavailable error code
|
62
|
+
data = File.read(File.dirname(__FILE__) + "/responses/invalid_system_unavailable.txt").strip
|
63
|
+
socket = TCPSocket.stub_instance(:print => true, :close => true, :gets => data)
|
64
|
+
TCPSocket.stub_method(:new => socket)
|
65
|
+
|
66
|
+
pos = GBIP::POS.new(@valid_username, @invalid_password)
|
67
|
+
lambda { pos.find(:first, @isbn10) }.should raise_error(GBIP::SystemUnavailableError)
|
27
68
|
end
|
28
69
|
|
29
70
|
specify "should return a GBIP::Title object when queried for a single valid ISBN10" do
|
30
|
-
|
31
|
-
|
71
|
+
# Mock TCPSocket to return a single matching title
|
72
|
+
data = File.read(File.dirname(__FILE__) + "/responses/single_result.txt").strip
|
73
|
+
socket = TCPSocket.stub_instance(:print => true, :close => true, :gets => data)
|
74
|
+
TCPSocket.stub_method(:new => socket)
|
75
|
+
|
76
|
+
pos = GBIP::POS.new(@username, @password)
|
77
|
+
result = pos.find(:first, @isbn10)
|
78
|
+
|
79
|
+
# check that a singlular result is returned, not an array
|
32
80
|
result.should be_a_kind_of(GBIP::Title)
|
81
|
+
|
82
|
+
# TODO: check that our request was for an isbn13
|
83
|
+
socket.should have_received(:print)
|
33
84
|
end
|
34
85
|
|
35
86
|
specify "should return a GBIP::Title object when queried for a single valid ISBN13" do
|
36
|
-
|
37
|
-
|
87
|
+
# Mock TCPSocket to return a single matching title
|
88
|
+
data = File.read(File.dirname(__FILE__) + "/responses/single_result.txt").strip
|
89
|
+
socket = TCPSocket.stub_instance(:print => true, :close => true, :gets => data)
|
90
|
+
TCPSocket.stub_method(:new => socket)
|
91
|
+
|
92
|
+
pos = GBIP::POS.new(@valid_username, @valid_password)
|
93
|
+
result = pos.find(:first, @isbn13)
|
38
94
|
result.should be_a_kind_of(GBIP::Title)
|
95
|
+
|
96
|
+
# TODO: check that our request was for an isbn13
|
97
|
+
socket.should have_received(:print)
|
39
98
|
end
|
40
99
|
|
41
100
|
specify "should return a GBIP::Title object when the response contains an extra #" do
|
42
|
-
|
43
|
-
|
101
|
+
# Mock TCPSocket to return a single matching title that uses a # for its currency
|
102
|
+
# sign, as well as a record seperator
|
103
|
+
data = File.read(File.dirname(__FILE__) + "/responses/single_result2.txt").strip
|
104
|
+
socket = TCPSocket.stub_instance(:print => true, :close => true, :gets => data)
|
105
|
+
TCPSocket.stub_method(:new => socket)
|
106
|
+
|
107
|
+
pos = GBIP::POS.new(@username, @password)
|
108
|
+
result = pos.find(:first, @isbn13)
|
44
109
|
result.should be_a_kind_of(GBIP::Title)
|
45
110
|
result.title.should eql("Pro EDI in BizTalk Server 2006 R2:Electronic Document Interchange Solutions")
|
46
111
|
end
|
47
112
|
|
48
113
|
specify "should return a GBIP::Title object when querying for a single valid ISBN10 that has no warehouse data" do
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
end
|
114
|
+
# Mock TCPSocket to return a single matching title that lists no warehouses
|
115
|
+
data = File.read(File.dirname(__FILE__) + "/responses/no_warehouses.txt").strip
|
116
|
+
socket = TCPSocket.stub_instance(:print => true, :close => true, :gets => data)
|
117
|
+
TCPSocket.stub_method(:new => socket)
|
54
118
|
|
55
|
-
|
56
|
-
|
57
|
-
result = pos.find(:first, @valid_isbn10_with_no_warehouses)
|
119
|
+
pos = GBIP::POS.new(@username, @password)
|
120
|
+
result = pos.find(:first, @isbn10)
|
58
121
|
result.should be_a_kind_of(GBIP::Title)
|
59
122
|
result.warehouses.should be_empty
|
60
123
|
end
|
61
124
|
|
62
125
|
specify "should return nil when a single ISBN10 not recognised by GBIP is requested" do
|
63
|
-
|
64
|
-
|
126
|
+
# Mock TCPSocket to return a valid response with no matching titles
|
127
|
+
data = File.read(File.dirname(__FILE__) + "/responses/no_result.txt").strip
|
128
|
+
socket = TCPSocket.stub_instance(:print => true, :close => true, :gets => data)
|
129
|
+
TCPSocket.stub_method(:new => socket)
|
130
|
+
|
131
|
+
pos = GBIP::POS.new(@username, @password)
|
132
|
+
result = pos.find(:first, @isbn10)
|
65
133
|
result.should eql(nil)
|
66
134
|
end
|
67
135
|
|
68
136
|
specify "should return nil when a single ISBN13 not recognised by GBIP is requested" do
|
69
|
-
|
70
|
-
|
137
|
+
# Mock TCPSocket to return a valid response with no matching titles
|
138
|
+
data = File.read(File.dirname(__FILE__) + "/responses/no_result.txt").strip
|
139
|
+
socket = TCPSocket.stub_instance(:print => true, :close => true, :gets => data)
|
140
|
+
TCPSocket.stub_method(:new => socket)
|
141
|
+
|
142
|
+
pos = GBIP::POS.new(@username, @password)
|
143
|
+
result = pos.find(:first, @isbn13)
|
71
144
|
result.should eql(nil)
|
72
145
|
end
|
73
146
|
|
74
147
|
specify "should return nil when any object is supplied as an ISBN when searching for :first" do
|
75
|
-
pos = GBIP::POS.new(@
|
148
|
+
pos = GBIP::POS.new(@username, @password)
|
76
149
|
result = pos.find(:first, nil)
|
77
150
|
result.should eql(nil)
|
78
151
|
|
@@ -84,49 +157,81 @@ context "A new POS object" do
|
|
84
157
|
end
|
85
158
|
|
86
159
|
specify "should perform a successful query if the ISBN is provided as a number" do
|
87
|
-
|
88
|
-
|
160
|
+
# Mock TCPSocket to return a valid response with no matching titles
|
161
|
+
data = File.read(File.dirname(__FILE__) + "/responses/single_result.txt").strip
|
162
|
+
socket = TCPSocket.stub_instance(:print => true, :close => true, :gets => data)
|
163
|
+
TCPSocket.stub_method(:new => socket)
|
164
|
+
|
165
|
+
pos = GBIP::POS.new(@username, @password)
|
166
|
+
result = pos.find(:first, @isbn13.to_i)
|
89
167
|
result.should be_a_kind_of(GBIP::Title)
|
90
168
|
end
|
91
169
|
|
92
170
|
specify "should raise an exception if no reponse is received in a certain amount of time" do
|
93
|
-
|
94
|
-
|
171
|
+
# Mock TCPSocket to take 5 seconds to generate a response
|
172
|
+
socket = TCPSocket.stub_instance(:print => true, :close => true)
|
173
|
+
socket.stub_method(:gets) do
|
174
|
+
sleep 5
|
175
|
+
end
|
176
|
+
TCPSocket.stub_method(:new => socket)
|
177
|
+
|
178
|
+
pos = GBIP::POS.new(@username, @password)
|
179
|
+
lambda { pos.find(:first, @isbn13, :timeout => 2) }.should raise_error(Timeout::Error)
|
95
180
|
end
|
96
181
|
|
97
182
|
#####################
|
98
183
|
# :all searches
|
99
184
|
#####################
|
100
185
|
specify "should return a non-empty Array when queried for a single valid ISBN10" do
|
101
|
-
|
102
|
-
|
186
|
+
# Mock TCPSocket to return a valid response with a single result
|
187
|
+
data = File.read(File.dirname(__FILE__) + "/responses/single_result.txt").strip
|
188
|
+
socket = TCPSocket.stub_instance(:print => true, :close => true, :gets => data)
|
189
|
+
TCPSocket.stub_method(:new => socket)
|
190
|
+
|
191
|
+
pos = GBIP::POS.new(@username, @password)
|
192
|
+
result = pos.find(:all, @isbn10)
|
103
193
|
result.should be_a_kind_of(Array)
|
104
194
|
result.should_not be_empty
|
105
195
|
end
|
106
196
|
|
107
197
|
specify "should return a non-empty Array when queried for a single valid ISBN13" do
|
108
|
-
|
109
|
-
|
198
|
+
# Mock TCPSocket to return a valid response with a single result
|
199
|
+
data = File.read(File.dirname(__FILE__) + "/responses/single_result.txt").strip
|
200
|
+
socket = TCPSocket.stub_instance(:print => true, :close => true, :gets => data)
|
201
|
+
TCPSocket.stub_method(:new => socket)
|
202
|
+
|
203
|
+
pos = GBIP::POS.new(@valid_username, @valid_password)
|
204
|
+
result = pos.find(:all, @isbn13)
|
110
205
|
result.should be_a_kind_of(Array)
|
111
206
|
result.should_not be_empty
|
112
207
|
end
|
113
208
|
|
114
209
|
specify "should return an empty Array when a single ISBN10 not recognised by GBIP is requested" do
|
115
|
-
|
116
|
-
|
210
|
+
# Mock TCPSocket to return a valid response with no matches
|
211
|
+
data = File.read(File.dirname(__FILE__) + "/responses/no_result.txt").strip
|
212
|
+
socket = TCPSocket.stub_instance(:print => true, :close => true, :gets => data)
|
213
|
+
TCPSocket.stub_method(:new => socket)
|
214
|
+
|
215
|
+
pos = GBIP::POS.new(@username, @password)
|
216
|
+
result = pos.find(:all, @isbn10)
|
117
217
|
result.should be_a_kind_of(Array)
|
118
218
|
result.should be_empty
|
119
219
|
end
|
120
220
|
|
121
221
|
specify "should return an empty Array when a single ISBN13 not recognised by GBIP is requested" do
|
122
|
-
|
123
|
-
|
222
|
+
# Mock TCPSocket to return a valid response with no matches
|
223
|
+
data = File.read(File.dirname(__FILE__) + "/responses/no_result.txt").strip
|
224
|
+
socket = TCPSocket.stub_instance(:print => true, :close => true, :gets => data)
|
225
|
+
TCPSocket.stub_method(:new => socket)
|
226
|
+
|
227
|
+
pos = GBIP::POS.new(@username, @password)
|
228
|
+
result = pos.find(:all, @isbn13)
|
124
229
|
result.should be_a_kind_of(Array)
|
125
230
|
result.should be_empty
|
126
231
|
end
|
127
232
|
|
128
233
|
specify "should return an empty array when any object is supplied as an ISBN when searching for :all" do
|
129
|
-
pos = GBIP::POS.new(@
|
234
|
+
pos = GBIP::POS.new(@username, @password)
|
130
235
|
result = pos.find(:all, nil)
|
131
236
|
result.should be_a_kind_of(Array)
|
132
237
|
result.should be_empty
|
@@ -141,8 +246,13 @@ context "A new POS object" do
|
|
141
246
|
end
|
142
247
|
|
143
248
|
specify "should perform a successful query if the ISBN is provided as a number to an :all search" do
|
144
|
-
|
145
|
-
|
249
|
+
# Mock TCPSocket to return a valid response with a single result
|
250
|
+
data = File.read(File.dirname(__FILE__) + "/responses/single_result.txt").strip
|
251
|
+
socket = TCPSocket.stub_instance(:print => true, :close => true, :gets => data)
|
252
|
+
TCPSocket.stub_method(:new => socket)
|
253
|
+
|
254
|
+
pos = GBIP::POS.new(@username, @password)
|
255
|
+
result = pos.find(:all, @isbn13.to_i)
|
146
256
|
result.should be_a_kind_of(Array)
|
147
257
|
result.should_not be_empty
|
148
258
|
end
|
@@ -151,10 +261,10 @@ context "A new POS object" do
|
|
151
261
|
# invalid searches
|
152
262
|
#####################
|
153
263
|
specify "should raise an exception when an invalid search type is supplied" do
|
154
|
-
pos = GBIP::POS.new(@
|
155
|
-
lambda { pos.find(nil, @
|
156
|
-
lambda { pos.find(:last, @
|
157
|
-
lambda { pos.find(123456, @
|
264
|
+
pos = GBIP::POS.new(@username, @password)
|
265
|
+
lambda { pos.find(nil, @isbn10) }.should raise_error(ArgumentError)
|
266
|
+
lambda { pos.find(:last, @isbn10) }.should raise_error(ArgumentError)
|
267
|
+
lambda { pos.find(123456, @isbn10) }.should raise_error(ArgumentError)
|
158
268
|
end
|
159
269
|
|
160
270
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
5
|
@@ -0,0 +1 @@
|
|
1
|
+
7
|
@@ -0,0 +1 @@
|
|
1
|
+
8
|
@@ -0,0 +1 @@
|
|
1
|
+
9
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gbip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Healy
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-11-07 00:00:00 +11:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -40,7 +40,6 @@ files:
|
|
40
40
|
- lib/gbip/pos.rb
|
41
41
|
- lib/gbip/title.rb
|
42
42
|
- lib/gbip/warehouse.rb
|
43
|
-
- specs/mock_tcpsocket.rb
|
44
43
|
- specs/pos_class_spec.rb
|
45
44
|
- specs/responses
|
46
45
|
- specs/responses/invalid_login.txt
|
@@ -48,7 +47,11 @@ files:
|
|
48
47
|
- specs/responses/no_warehouses.txt
|
49
48
|
- specs/responses/single_result.txt
|
50
49
|
- specs/responses/single_result2.txt
|
51
|
-
- specs/
|
50
|
+
- specs/responses/invalid_account.txt
|
51
|
+
- specs/responses/invalid_bad_data.txt
|
52
|
+
- specs/responses/invalid_request.txt
|
53
|
+
- specs/responses/invalid_system_unavailable.txt
|
54
|
+
- specs/spec_helper.rb
|
52
55
|
- Rakefile
|
53
56
|
- CHANGELOG
|
54
57
|
- README
|
@@ -85,6 +88,5 @@ signing_key:
|
|
85
88
|
specification_version: 2
|
86
89
|
summary: A library for access the globalbooksinprint.com API
|
87
90
|
test_files:
|
88
|
-
- specs/mock_tcpsocket.rb
|
89
91
|
- specs/pos_class_spec.rb
|
90
|
-
- specs/
|
92
|
+
- specs/spec_helper.rb
|
data/specs/mock_tcpsocket.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
class MockTCPSocket
|
2
|
-
|
3
|
-
def initialize(host,port)
|
4
|
-
# do nothing
|
5
|
-
end
|
6
|
-
|
7
|
-
def print(query)
|
8
|
-
query = query.to_s.split("\t")
|
9
|
-
@username = query[3]
|
10
|
-
@password = query[4]
|
11
|
-
m, @isbn = *query[7].match(/bn=(\d\d\d\d\d\d\d\d\d\d\d\d\d)/)
|
12
|
-
end
|
13
|
-
|
14
|
-
def gets(placeholder)
|
15
|
-
|
16
|
-
# if incorrect login details are supplied
|
17
|
-
unless @username.eql?("user") && @password.eql?("pass")
|
18
|
-
return File.read(File.dirname(__FILE__) + "/responses/invalid_login.txt").strip
|
19
|
-
end
|
20
|
-
|
21
|
-
# if the requested isbn isn't an isbn10
|
22
|
-
unless RBook::ISBN.valid_isbn13?(@isbn)
|
23
|
-
return File.read(File.dirname(__FILE__) + "/responses/no_result.txt").strip
|
24
|
-
end
|
25
|
-
|
26
|
-
# if the isbn10 is one we have available
|
27
|
-
if @isbn.eql?("9781741146714")
|
28
|
-
return File.read(File.dirname(__FILE__) + "/responses/single_result.txt").strip
|
29
|
-
elsif @isbn.eql?("9781590599358")
|
30
|
-
return File.read(File.dirname(__FILE__) + "/responses/single_result2.txt").strip
|
31
|
-
elsif @isbn.eql?("9780732282721")
|
32
|
-
return File.read(File.dirname(__FILE__) + "/responses/no_warehouses.txt").strip
|
33
|
-
else
|
34
|
-
return File.read(File.dirname(__FILE__) + "/responses/no_result.txt").strip
|
35
|
-
end
|
36
|
-
@username = nil
|
37
|
-
@password = nil
|
38
|
-
isbn = nil
|
39
|
-
end
|
40
|
-
|
41
|
-
def close
|
42
|
-
|
43
|
-
end
|
44
|
-
end
|
data/specs/timeout_tcpsocket.rb
DELETED