gbip 0.7 → 0.7.1
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/README +1 -1
- data/Rakefile +1 -1
- data/lib/gbip/pos.rb +25 -17
- data/specs/mock_tcpsocket.rb +7 -5
- data/specs/pos_class_spec.rb +15 -0
- data/specs/responses/single_result2.txt +1 -0
- metadata +3 -2
data/README
CHANGED
@@ -19,7 +19,7 @@ puts gbip.find(:first, "0732282721").to_yaml
|
|
19
19
|
|
20
20
|
= Disclaimer
|
21
21
|
|
22
|
-
I am in no way affiliated with Bowker,
|
22
|
+
I am in no way affiliated with Bowker, the operators of globalbooksinprint.com.
|
23
23
|
Please contact them with questions about the service and how to obtain an account.
|
24
24
|
|
25
25
|
= Contact
|
data/Rakefile
CHANGED
data/lib/gbip/pos.rb
CHANGED
@@ -23,7 +23,7 @@ module GBIP
|
|
23
23
|
|
24
24
|
# search for the specified ISBN on globalbooksinprint.com.
|
25
25
|
# Accepts both ISBN10 and ISBN13's.
|
26
|
-
#
|
26
|
+
#
|
27
27
|
# Supported options:
|
28
28
|
# :markets => only search the specified markets. comma sperated list
|
29
29
|
# :timeout => amount of time in seconds to wait for a reponse from the server before timing out. Defaults to 10.
|
@@ -36,8 +36,7 @@ module GBIP
|
|
36
36
|
|
37
37
|
options = {:timeout => 10}.merge(options)
|
38
38
|
|
39
|
-
|
40
|
-
isbn = RBook::ISBN.convert_to_isbn10(isbn.to_s)
|
39
|
+
isbn = RBook::ISBN.convert_to_isbn13(isbn.to_s) || isbn.to_s
|
41
40
|
return default_return if isbn.nil?
|
42
41
|
|
43
42
|
request_format = "POS"
|
@@ -61,25 +60,34 @@ module GBIP
|
|
61
60
|
request_string << "#{version}\t#{supplier}\t#{request}\t#{filters}\t#{records}\t#{sort_order}\t"
|
62
61
|
request_string << "#{markets}\t"
|
63
62
|
|
64
|
-
|
65
|
-
|
66
|
-
response = Timeout::timeout(options[:timeout]) {
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
63
|
+
sock = @socket_class.new(POS_SERVER, POS_PORT)
|
64
|
+
sock.print request_string
|
65
|
+
response = Timeout::timeout(options[:timeout]) { sock.gets(nil) }
|
66
|
+
sock.close
|
67
|
+
|
68
|
+
# split the response into header/body
|
69
|
+
idx = response.index("#")
|
70
|
+
if idx.nil?
|
71
|
+
header = response.split("\t")
|
72
|
+
else
|
73
|
+
header = response[0, idx - 1]
|
74
|
+
body = response[idx, response.size - idx].split("\t")
|
75
|
+
body.shift
|
76
|
+
end
|
77
|
+
|
78
|
+
titles_arr = [[]]
|
79
|
+
body.each do |element|
|
80
|
+
if element == "#" && titles_arr.last.size > 15
|
81
|
+
titles_arr << []
|
75
82
|
else
|
76
|
-
titles_arr <<
|
77
|
-
titles_arr[-1] = titles_arr.last[1,titles_arr.last.size-1]
|
83
|
+
titles_arr.last << element
|
78
84
|
end
|
85
|
+
#titles_arr << arr.split("\t")
|
86
|
+
#titles_arr[-1] = titles_arr.last[1,titles_arr.last.size-1]
|
79
87
|
end
|
80
88
|
|
81
89
|
# raise an exception if incorrect login details were provided
|
82
|
-
if header.first.eql?("66")
|
90
|
+
if header.first.eql?("66")
|
83
91
|
raise GBIP::InvalidLoginError, "Invalid username or password"
|
84
92
|
end
|
85
93
|
|
data/specs/mock_tcpsocket.rb
CHANGED
@@ -8,7 +8,7 @@ class MockTCPSocket
|
|
8
8
|
query = query.to_s.split("\t")
|
9
9
|
@username = query[3]
|
10
10
|
@password = query[4]
|
11
|
-
m, @isbn = *query[7].match(/bn=(\d\d\d\d\d\d\d\d\d
|
11
|
+
m, @isbn = *query[7].match(/bn=(\d\d\d\d\d\d\d\d\d\d\d\d\d)/)
|
12
12
|
end
|
13
13
|
|
14
14
|
def gets(placeholder)
|
@@ -19,21 +19,23 @@ class MockTCPSocket
|
|
19
19
|
end
|
20
20
|
|
21
21
|
# if the requested isbn isn't an isbn10
|
22
|
-
unless RBook::ISBN.
|
22
|
+
unless RBook::ISBN.valid_isbn13?(@isbn)
|
23
23
|
return File.read(File.dirname(__FILE__) + "/responses/no_result.txt").strip
|
24
24
|
end
|
25
25
|
|
26
26
|
# if the isbn10 is one we have available
|
27
|
-
if @isbn.eql?("
|
27
|
+
if @isbn.eql?("9781741146714")
|
28
28
|
return File.read(File.dirname(__FILE__) + "/responses/single_result.txt").strip
|
29
|
-
elsif @isbn.eql?("
|
29
|
+
elsif @isbn.eql?("9781590599358")
|
30
|
+
return File.read(File.dirname(__FILE__) + "/responses/single_result2.txt").strip
|
31
|
+
elsif @isbn.eql?("9780732282721")
|
30
32
|
return File.read(File.dirname(__FILE__) + "/responses/no_warehouses.txt").strip
|
31
33
|
else
|
32
34
|
return File.read(File.dirname(__FILE__) + "/responses/no_result.txt").strip
|
33
35
|
end
|
34
36
|
@username = nil
|
35
37
|
@password = nil
|
36
|
-
|
38
|
+
isbn = nil
|
37
39
|
end
|
38
40
|
|
39
41
|
def close
|
data/specs/pos_class_spec.rb
CHANGED
@@ -12,6 +12,7 @@ context "A new POS object" do
|
|
12
12
|
@invalid_password = "word"
|
13
13
|
@valid_isbn10 = "1741146712"
|
14
14
|
@valid_isbn13 = "9781741146714"
|
15
|
+
@valid_isbn13_hash = "9781590599358"
|
15
16
|
@notfound_isbn10 = "0571228526"
|
16
17
|
@notfound_isbn13 = "9780571228522"
|
17
18
|
@valid_isbn10_with_no_warehouses = "0732282721"
|
@@ -37,6 +38,20 @@ context "A new POS object" do
|
|
37
38
|
result.should be_a_kind_of(GBIP::Title)
|
38
39
|
end
|
39
40
|
|
41
|
+
specify "should return a GBIP::Title object when the response contains an extra #" do
|
42
|
+
pos = GBIP::POS.new(@valid_username, @valid_password, MockTCPSocket)
|
43
|
+
result = pos.find(:first, @valid_isbn13_hash)
|
44
|
+
result.should be_a_kind_of(GBIP::Title)
|
45
|
+
result.title.should eql("Pro EDI in BizTalk Server 2006 R2:Electronic Document Interchange Solutions")
|
46
|
+
end
|
47
|
+
|
48
|
+
specify "should return a GBIP::Title object when querying for a single valid ISBN10 that has no warehouse data" do
|
49
|
+
pos = GBIP::POS.new(@valid_username, @valid_password, MockTCPSocket)
|
50
|
+
result = pos.find(:first, @valid_isbn10_with_no_warehouses)
|
51
|
+
result.should be_a_kind_of(GBIP::Title)
|
52
|
+
result.warehouses.should be_empty
|
53
|
+
end
|
54
|
+
|
40
55
|
specify "should return a GBIP::Title object when querying for a single valid ISBN10 that has no warehouse data" do
|
41
56
|
pos = GBIP::POS.new(@valid_username, @valid_password, MockTCPSocket)
|
42
57
|
result = pos.find(:first, @valid_isbn10_with_no_warehouses)
|
@@ -0,0 +1 @@
|
|
1
|
+
3 rainbowbook 2 # 66797534 1 GBR Pro EDI in BizTalk Server 2006 R2:Electronic Document Interchange Solutions 978-1-59059-935-8 Trade Paper Active Record Deshev, Hristo Apress L. P. 112007 33.99 UNITED STATES 152887 # DATA TRANSMISSION SYSTEMS COMPUTERS / Data Transmission Systems / General COMPUTER NETWORKING & COMMUNICATIONS BLK,BNT,CLD,ING,POL 8 Blackwell, Lake Oswego, OR In stock 0 10/07/2008 Baker & Taylor Books, Bridgewater, NJ 0 10/12/2008 Baker & Taylor Books, Commerce, GA 5 0 10/12/2008 Baker & Taylor Books, Momence, IL 2 4 10/12/2008 Baker & Taylor Books, Reno, NV 0 10/12/2008 Cromland, Allentown, PA Available for order 0 10/10/2008 Ingram Book Company, La Vergne, TN Available for order 0 10/12/2008 Powells.com, Portland, OR In stock 0 02/01/2008
|
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:
|
4
|
+
version: 0.7.1
|
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-10-
|
12
|
+
date: 2008-10-14 00:00:00 +11:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -47,6 +47,7 @@ files:
|
|
47
47
|
- specs/responses/no_result.txt
|
48
48
|
- specs/responses/no_warehouses.txt
|
49
49
|
- specs/responses/single_result.txt
|
50
|
+
- specs/responses/single_result2.txt
|
50
51
|
- specs/timeout_tcpsocket.rb
|
51
52
|
- Rakefile
|
52
53
|
- CHANGELOG
|