xisbn 0.0.1 → 0.0.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.
data/lib/xisbn.rb CHANGED
@@ -1,18 +1,61 @@
1
- require 'net/http'
2
- require 'rexml/document'
3
-
4
- # pass in an ISBN and get back a list of related isbns
5
- # as defined by the OCLC xisbn webservice at
6
- # http://www.oclc.org/research/projects/xisbn/
7
-
8
- def xisbn(isbn)
9
- clean_isbn = isbn.gsub(/[^0-9X]/,'')
10
-
11
- xml = Net::HTTP.get('labs.oclc.org', "/xisbn/#{clean_isbn}")
12
- doc = REXML::Document.new(xml)
13
-
14
- isbns = []
15
- doc.elements.each('idlist/isbn') {|e| isbns << e.text}
16
-
17
- return isbns
18
- end
1
+ require 'net/http'
2
+ require 'rexml/document'
3
+
4
+ # Pass in an ISBN and get back a list of related isbns
5
+ # as defined by the OCLC xisbn webservice at
6
+ # http://www.oclc.org/research/projects/xisbn/
7
+ #
8
+ # require 'xisbn'
9
+ # include XISBN
10
+ # isbns = xisbn('0-9745140-8-X')
11
+ #
12
+ # If you want to guard against timeouts pass in the number
13
+ # of seconds you don't want to wait longer than:
14
+ #
15
+ # isbns = xisbn('0-94745140-8-X', :timeout => 1)
16
+ #
17
+ # If you want to use LibraryThing's xisbn service:
18
+ #
19
+ # isbns = thing_isbn('0-9745140-8-X')
20
+
21
+ module XISBN
22
+ require 'uri'
23
+ @@oclc_uri = URI.parse('http://labs.oclc.org/xisbn')
24
+ @@thing_uri = URI.parse('http://www.librarything.com/api/thingISBN')
25
+
26
+ def xisbn(isbn, opts={})
27
+ return get_isbns(@@oclc_uri, isbn, opts)
28
+ end
29
+
30
+ def thing_isbn(isbn, opts={})
31
+ return get_isbns(@@thing_uri, isbn, opts)
32
+ end
33
+
34
+ private
35
+
36
+ def get_isbns(uri, isbn, opts={})
37
+ timeout = opts[:timeout] || 60
38
+ redirects = opts[:redirects] || 10
39
+ clean_isbn = isbn.gsub(/[^0-9X]/,'')
40
+
41
+ # base case for http redirect recursion
42
+ raise ArgumentError, 'Too many redirects' if redirects == 0
43
+
44
+ http = Net::HTTP.new(uri.host)
45
+ http.read_timeout = timeout
46
+ http.open_timeout = timeout
47
+ response = http.get("#{uri.path}/#{clean_isbn}")
48
+
49
+ # follow HTTP redirects
50
+ if response.kind_of?(Net::HTTPRedirection)
51
+ return get_isbns(URI.parse(response['location']), isbn,
52
+ {:timeout => timeout, :redirects => (redirects-1)})
53
+ end
54
+
55
+ isbns = []
56
+ doc = REXML::Document.new(response.body)
57
+ doc.elements.each('idlist/isbn') {|e| isbns << e.text}
58
+ return isbns
59
+ end
60
+
61
+ end
@@ -1,23 +1,35 @@
1
- $LOAD_PATH.unshift 'lib'
2
-
3
- require 'test/unit'
4
- require 'xisbn'
5
-
6
- class XISBNTest < Test::Unit::TestCase
7
-
8
- def test_lookup
9
- isbns = xisbn('0192816640')
10
- assert isbns.length > 0
11
- end
12
-
13
- def test_lookup_with_dashes
14
- isbns = xisbn('01928-16-640')
15
- assert isbns.length > 0
16
- end
17
-
18
- def test_bad_lookup
19
- isbns = xisbn('foobar')
20
- assert isbns.length == 0
21
- end
22
-
23
- end
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift 'lib'
4
+
5
+ require 'test/unit'
6
+ require 'xisbn'
7
+ include XISBN
8
+
9
+ class XISBNTest < Test::Unit::TestCase
10
+
11
+ def test_lookup
12
+ isbns = xisbn('0192816640')
13
+ assert isbns.length > 0
14
+ end
15
+
16
+ def test_lookup_with_dashes
17
+ isbns = xisbn('01928-16-640')
18
+ assert isbns.length > 0
19
+ end
20
+
21
+ def test_bad_lookup
22
+ isbns = xisbn('foobar')
23
+ assert isbns.length == 0
24
+ end
25
+
26
+ def test_timeout
27
+ isbns = xisbn('foobar', :timeout=>2)
28
+ end
29
+
30
+ def test_thing_isbn
31
+ isbns = thing_isbn('01928-16-640')
32
+ assert isbns.length > 0
33
+ end
34
+
35
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.8.11
2
+ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: xisbn
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.1
7
- date: 2006-02-28 00:00:00.000000 -06:00
6
+ version: 0.0.3
7
+ date: 2007-02-14 00:00:00 -05:00
8
8
  summary: look up related isbns with OCLCs xisbn service
9
9
  require_paths:
10
- - lib
10
+ - lib
11
11
  email: ehs@pobox.com
12
12
  homepage: http://www.textualize.com/xisbn
13
13
  rubyforge_project:
@@ -18,41 +18,30 @@ bindir: bin
18
18
  has_rdoc: true
19
19
  required_ruby_version: !ruby/object:Gem::Version::Requirement
20
20
  requirements:
21
- -
22
- - ">"
23
- - !ruby/object:Gem::Version
24
- version: 0.0.0
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
25
24
  version:
26
25
  platform: ruby
27
26
  signing_key:
28
27
  cert_chain:
28
+ post_install_message:
29
29
  authors:
30
- - Ed Summers
30
+ - Ed Summers
31
31
  files:
32
- - lib/xisbn.rb
33
- - lib/.svn/dir-wcprops
34
- - lib/.svn/empty-file
35
- - lib/.svn/entries
36
- - lib/.svn/format
37
- - lib/.svn/prop-base
38
- - lib/.svn/props
39
- - lib/.svn/README.txt
40
- - lib/.svn/text-base
41
- - lib/.svn/tmp
42
- - lib/.svn/wcprops
43
- - lib/.svn/prop-base/xisbn.rb.svn-base
44
- - lib/.svn/props/xisbn.rb.svn-work
45
- - lib/.svn/text-base/xisbn.rb.svn-base
46
- - lib/.svn/tmp/prop-base
47
- - lib/.svn/tmp/props
48
- - lib/.svn/tmp/text-base
49
- - lib/.svn/tmp/wcprops
50
- - lib/.svn/wcprops/xisbn.rb.svn-work
51
- test_files:
52
- - test.rb
32
+ - lib/xisbn.rb
33
+ - test/xisbn_test.rb
34
+ test_files: []
35
+
53
36
  rdoc_options: []
37
+
54
38
  extra_rdoc_files: []
39
+
55
40
  executables: []
41
+
56
42
  extensions: []
43
+
57
44
  requirements: []
58
- dependencies: []
45
+
46
+ dependencies: []
47
+
data/lib/.svn/README.txt DELETED
@@ -1,2 +0,0 @@
1
- This is a Subversion working copy administrative directory.
2
- Visit http://subversion.tigris.org/ for more information.
data/lib/.svn/dir-wcprops DELETED
@@ -1,5 +0,0 @@
1
- K 25
2
- svn:wc:ra_dav:version-url
3
- V 33
4
- /svn/!svn/ver/372/xisbn/trunk/lib
5
- END
data/lib/.svn/empty-file DELETED
File without changes
data/lib/.svn/entries DELETED
@@ -1,22 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <wc-entries
3
- xmlns="svn:">
4
- <entry
5
- committed-rev="372"
6
- name=""
7
- committed-date="2006-02-28T06:34:26.176837Z"
8
- url="http://www.textualize.com/svn/xisbn/trunk/lib"
9
- last-author="ed"
10
- kind="dir"
11
- uuid="4dc5e89f-90f6-0310-ab54-a6a856e7c30e"
12
- revision="372"/>
13
- <entry
14
- committed-rev="372"
15
- name="xisbn.rb"
16
- text-time="2006-02-28T15:20:47.000000Z"
17
- committed-date="2006-02-28T06:34:26.176837Z"
18
- checksum="2b6d73e6e65a5c3ab351fe1b4040693e"
19
- last-author="ed"
20
- kind="file"
21
- prop-time="2006-02-28T15:20:47.000000Z"/>
22
- </wc-entries>
data/lib/.svn/format DELETED
@@ -1 +0,0 @@
1
- 4
@@ -1 +0,0 @@
1
- END
@@ -1 +0,0 @@
1
- END
@@ -1,18 +0,0 @@
1
- require 'net/http'
2
- require 'rexml/document'
3
-
4
- # pass in an ISBN and get back a list of related isbns
5
- # as defined by the OCLC xisbn webservice at
6
- # http://www.oclc.org/research/projects/xisbn/
7
-
8
- def xisbn(isbn)
9
- clean_isbn = isbn.gsub(/[^0-9X]/,'')
10
-
11
- xml = Net::HTTP.get('labs.oclc.org', "/xisbn/#{clean_isbn}")
12
- doc = REXML::Document.new(xml)
13
-
14
- isbns = []
15
- doc.elements.each('idlist/isbn') {|e| isbns << e.text}
16
-
17
- return isbns
18
- end
@@ -1,5 +0,0 @@
1
- K 25
2
- svn:wc:ra_dav:version-url
3
- V 42
4
- /svn/!svn/ver/372/xisbn/trunk/lib/xisbn.rb
5
- END