rbook 0.4.1 → 0.4.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/Rakefile CHANGED
@@ -5,7 +5,7 @@ require 'rake/testtask'
5
5
  require "rake/gempackagetask"
6
6
  require "rubygems"
7
7
 
8
- PKG_VERSION = "0.4.1"
8
+ PKG_VERSION = "0.4.3"
9
9
  PKG_NAME = "rbook"
10
10
  PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
11
11
  RUBYFORGE_PROJECT = 'rbook'
@@ -7,6 +7,6 @@ require File.dirname(__FILE__) + '/../lib/rbook/gbip'
7
7
 
8
8
  gbip = RBook::GBIP::POS.new("username", "password")
9
9
 
10
- puts gbip.find("0091835135").inspect
11
- #puts tp.find("1741146712").inspect
10
+ #puts gbip.find("0091835135").inspect
11
+ puts gbip.find("1741146712").inspect
12
12
 
@@ -7,8 +7,7 @@ require File.dirname(__FILE__) + '/../lib/rbook/pacstream'
7
7
 
8
8
  counter = 0
9
9
 
10
- RBook::Pacstream.get(:orders, :username => "9021000", :password => "test", :servername => "127.0.0.1") do |order|
11
- #File.open("#{counter.to_s}.ord", "w") { |f| f.puts order }
12
- puts order
10
+ RBook::Pacstream.get(:orders, :username => "myusername", :password => "mypass") do |order|
11
+ File.open("#{counter.to_s}.ord", "w") { |f| f.puts order }
13
12
  counter += 1
14
13
  end
@@ -0,0 +1,18 @@
1
+ # assuming you have rbook installed via rubygems,
2
+ # in a regular script, replace the following require
3
+ # line with these 2 lines:
4
+ # require 'rubygems'
5
+ # require 'rbook/titlepage'
6
+ require File.dirname(__FILE__) + '/../lib/rbook/titlepage'
7
+ require File.dirname(__FILE__) + '/../lib/rbook/onix'
8
+
9
+ client = RBook::TitlePage::WWWClient.new
10
+
11
+ client.login("username", "password")
12
+
13
+ text = client.get_onix_file("9780060000707")
14
+ #msg = RBook::Onix::Message.load_from_string(text)
15
+ #puts msg.to_s
16
+ puts text
17
+
18
+ client.logout
@@ -8,5 +8,9 @@
8
8
  require File.dirname(__FILE__) + '/../../lib/rbook/www'
9
9
 
10
10
 
11
- puts RBook::WWW.find_cover(ARGV[0], :amazon_uk).inspect
11
+ result = RBook::WWW.find_cover(:first, ARGV[0], :amazon_uk)
12
+
13
+ unless result.nil?
14
+ File.open("cover.jpg","w") { |of| of.write result[:data]}
15
+ end
12
16
 
@@ -73,6 +73,16 @@ module RBook
73
73
  # load each lineitem into the message
74
74
  item = RBook::Bisac::POLineItem.load_from_string(line)
75
75
  msg.items << item
76
+ when "41"
77
+ if line.length > 21
78
+ title = line[21, line.length - 21]
79
+ msg.items.last.title = title.strip unless title.nil?
80
+ end
81
+ when "42"
82
+ if line.length > 21
83
+ author = line[21, line.length - 21]
84
+ msg.items.last.author = author.strip unless author.nil?
85
+ end
76
86
  when "90" # footer
77
87
  # check the built objects match the file
78
88
  end
@@ -9,6 +9,7 @@ module RBook
9
9
 
10
10
  attr_accessor :sequence_number, :po_number, :line_item_number
11
11
  attr_accessor :isbn, :qty, :catalogue_code, :price
12
+ attr_accessor :author, :title
12
13
 
13
14
  # returns a new RBook::Bisac::POLineItem object using the data passed in as a string
14
15
  # refer to the bisac spec for the expected format of the string
@@ -2,6 +2,8 @@ $LOAD_PATH.unshift(File.dirname(__FILE__) + "/../")
2
2
 
3
3
  require 'rbook/isbn'
4
4
  require 'rbook/gbip/pos'
5
+ require 'rbook/gbip/title'
6
+ require 'rbook/gbip/warehouse'
5
7
 
6
8
  module RBook
7
9
 
@@ -1,4 +1,5 @@
1
1
  require 'socket'
2
+ require 'enumerator'
2
3
 
3
4
  module RBook
4
5
 
@@ -8,7 +9,8 @@ module RBook
8
9
  # RBook::GBIP has basic usage examples.
9
10
  class POS
10
11
 
11
- attr_accessor :username, :password
12
+ # don't think we really need these
13
+ #attr_accessor :username, :password
12
14
 
13
15
  POS_SERVER = "pos.bowker.com"
14
16
  POS_PORT = 7052
@@ -21,18 +23,94 @@ module RBook
21
23
 
22
24
  # search for the specified ISBN on globalbooksinprint.com.
23
25
  # Accepts both ISBN10 and ISBN13's.
24
- def find(isbn)
26
+ def find(type, isbn, options = {})
27
+ if type != :first && type != :all
28
+ raise ArgumentError, 'type must by :first or :all'
29
+ end
30
+
31
+ # global only accepts ISBNs as 10 digits at this stage
25
32
  isbn = RBook::ISBN::convert_to_isbn10(isbn)
26
33
  return nil if isbn.nil?
27
34
 
28
- request = "POS\t3\t2\t#{@username}\t#{@password}\t2\t\tbn=#{isbn}\t1|1|1|1|1|1|1|1|1|1\t10,0\t1\t\t"
35
+ request_format = "POS"
36
+ account_type = "3"
37
+ product = "2"
38
+ username = "#{@username}"
39
+ password = "#{@password}"
40
+ version = "2"
41
+ supplier = ""
42
+ request = "bn=#{isbn}"
43
+ filters = "1|1|1|1|1|1|1|1|1|1"
44
+ if type.eql?(:first)
45
+ records = "1,0"
46
+ else
47
+ records = "10,0"
48
+ end
49
+ sort_order = "1"
50
+ markets = options[:markets] || ""
51
+
52
+ request_string = "#{request_format}\t#{account_type}\t#{product}\t#{username}\t#{password}\t"
53
+ request_string << "#{version}\t#{supplier}\t#{request}\t#{filters}\t#{records}\t#{sort_order}\t"
54
+ request_string << "#{markets}\t"
55
+
29
56
  gbip = TCPSocket.new(POS_SERVER, POS_PORT)
30
- gbip.print request
31
- response = gbip.gets(nil)
57
+ gbip.print request_string
58
+ response = gbip.gets(nil).split("#")
32
59
  gbip.close
33
- return response.split("\t")
60
+
61
+ header = nil
62
+ titles_arr = []
63
+ response.each do |arr|
64
+ if header.nil?
65
+ header = arr.split("\t")
66
+ else
67
+ titles_arr << arr.split("\t")
68
+ titles_arr[-1] = titles_arr.last[1,titles_arr.last.size-1]
69
+ end
70
+ end
71
+
72
+ # raise an exception if incorrect login details were provided
73
+ if header.first.eql?("66")
74
+ raise ArgumentError, "Invalid username or password"
75
+ end
76
+
77
+ if titles_arr.size == 0
78
+ # return nil if no matching records found
79
+ return nil
80
+ else
81
+
82
+ titles = []
83
+ titles_arr.each do |arr|
84
+ title = build_object_tree(arr)
85
+ titles << title unless title.nil?
86
+ end
87
+
88
+ if type.eql?(:first)
89
+ return titles.first
90
+ else
91
+ return titles
92
+ end
93
+ end
94
+
34
95
  end
35
96
 
97
+ private
98
+
99
+ def build_object_tree(arr)
100
+ raise ArgumentError, 'arr must be an array' unless arr.class == Array
101
+ return nil if arr.size < 18
102
+
103
+ title_arr = arr[0, 15]
104
+ warehouse_arr = arr[15,arr.size - 15]
105
+ title = Title.new(title_arr)
106
+
107
+ warehouse_arr.each_slice(5) do |slice|
108
+ warehouse_obj = Warehouse.new(slice)
109
+ title.warehouses << warehouse_obj unless warehouse_obj.nil?
110
+ end
111
+
112
+ return title
113
+ end
36
114
  end
37
115
 
38
116
  end
@@ -0,0 +1,36 @@
1
+ require 'bigdecimal'
2
+
3
+ module RBook
4
+ module GBIP
5
+
6
+ # models a warehouse supply detail from the Global Books in Print API
7
+ class Title
8
+
9
+
10
+ attr_accessor :market, :title, :isbn, :binding, :status, :edition
11
+ attr_accessor :contributor, :publisher, :publication_date
12
+ attr_accessor :rrp, :supplier, :suppliers_with_stock
13
+ attr_accessor :warehouses
14
+
15
+ def initialize(arr)
16
+ raise ArgumentError, "arr must be an array" unless arr.class == Array
17
+ #raise ArgumentError, "Invalid number of array elements" unless arr.size == 14
18
+
19
+ self.market = arr[2].strip
20
+ self.title = arr[3].strip
21
+ self.isbn = RBook::ISBN.convert_to_isbn13(arr[4].strip) || arr[4].strip
22
+ self.binding = arr[5].strip
23
+ self.status = arr[6].strip
24
+ self.edition = arr[7].strip
25
+ self.contributor = arr[8].strip
26
+ self.publisher = arr[9].strip
27
+ self.publication_date = arr[10].strip
28
+ self.rrp = BigDecimal.new(arr[11].strip)
29
+ self.supplier = arr[12].strip
30
+ self.suppliers_with_stock = arr[13].strip
31
+
32
+ @warehouses = []
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,27 @@
1
+ require 'date'
2
+
3
+ module RBook
4
+ module GBIP
5
+
6
+ # models a warehouse supply detail from the Global Books in Print API
7
+ class Warehouse
8
+
9
+
10
+ attr_accessor :name, :status, :onhand, :onorder, :updated_at
11
+
12
+ def initialize(arr)
13
+ raise ArgumentError, "arr must be an array" unless arr.class == Array
14
+ raise ArgumentError, "Invalid number of array elements" unless arr.size == 5
15
+
16
+ puts arr.inspect
17
+ self.name = arr[0].strip
18
+ self.status = arr[1].strip
19
+ self.onhand = arr[2].to_i
20
+ self.onorder = arr[3].to_i
21
+ tmpdate = arr[4]
22
+ puts tmpdate
23
+ self.updated_at = Date.civil(tmpdate[6,4].to_i, tmpdate[0,2].to_i, tmpdate[3,2].to_i)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -31,7 +31,6 @@ module RBook
31
31
  calc = calc.insert(15, "-")
32
32
  return calc
33
33
  end
34
-
35
34
  end
36
35
 
37
36
  # Returns true if the supplied string is a valid isbn10 or isbn13
@@ -59,6 +58,7 @@ module RBook
59
58
  # ISBN::valid_isbn10?("not an isbn")
60
59
  # #=> false
61
60
  def ISBN::valid_isbn10?(isbn)
61
+ isbn.gsub!("-","") if isbn.class == String
62
62
  if isbn.nil?
63
63
  false
64
64
  elsif isbn.class != String
@@ -68,7 +68,12 @@ module RBook
68
68
  elsif isbn[/[^\dxX]/]
69
69
  false
70
70
  else
71
- isbn == isbn[0,9] + ISBN::calc_isbn10_check(isbn.to_s[0,9])
71
+ checkdigit = ISBN::calc_isbn10_check(isbn.to_s[0,9])
72
+ if checkdigit.eql?("X")
73
+ isbn == isbn[0,9] + "x" || isbn == isbn[0,9] + "X"
74
+ else
75
+ isbn == isbn[0,9] + checkdigit
76
+ end
72
77
  end
73
78
  end
74
79
 
@@ -83,6 +88,7 @@ module RBook
83
88
  # ISBN::valid_isbn13?("not an isbn")
84
89
  # #=> false
85
90
  def ISBN::valid_isbn13?(isbn)
91
+ isbn.gsub!("-","") if isbn.class == String
86
92
  if isbn.nil?
87
93
  false
88
94
  elsif isbn.class != String
@@ -15,8 +15,14 @@ module RBook
15
15
  @products = []
16
16
  end
17
17
 
18
+ # Attempts to create a message object using thge supplied xml string
19
+ def self.load_from_string(str)
20
+ doc = REXML::Document.new(str)
21
+ self.load_from_xmldoc(doc)
22
+ end
23
+
18
24
  # Attempts to create a message object using thge supplied xml document
19
- def Message.load_from_xmldoc(doc)
25
+ def self.load_from_xmldoc(doc)
20
26
  raise ArgumentError, 'load_from_xmldoc expects a REXML document object' unless doc.class == REXML::Document
21
27
  if REXML::XPath.first(doc, '/ONIXMessage/').nil? ||
22
28
  REXML::XPath.first(doc, '/ONIXMessage/Header').nil? ||
@@ -36,19 +36,25 @@ module RBook
36
36
  server = args[0][:servername] || "pacstream.tedis.com.au"
37
37
 
38
38
  begin
39
+ transaction_complete = false
39
40
  Net::FTP.open(server) do |ftp|
40
- file_regexp = Regexp.new(".*\.#{FILE_EXTENSIONS[type]}$", Regexp::IGNORECASE)
41
- ftp.login(args[0][:username], args[0][:password])
42
- ftp.chdir("outgoing/")
43
- ftp.nlst.each do |file|
44
- if file.match(file_regexp)
45
- tempfile = Tempfile.new("pacstream")
46
- tempfile.close
47
- ftp.getbinaryfile(file, tempfile.path)
48
- yield File.read(tempfile.path)
41
+
42
+ file_regexp = Regexp.new(".*\.#{FILE_EXTENSIONS[type]}$", Regexp::IGNORECASE)
43
+ ftp.login(args[0][:username].to_s, args[0][:password].to_s)
44
+ ftp.chdir("outgoing/")
45
+ ftp.nlst.each do |file|
46
+ if file.match(file_regexp)
47
+ tempfile = Tempfile.new("pacstream")
48
+ tempfile.close
49
+ ftp.getbinaryfile(file, tempfile.path)
50
+ yield File.read(tempfile.path)
51
+ end
49
52
  end
50
- end
53
+ transaction_complete = true
54
+ #ftp.quit
51
55
  end
56
+ rescue EOFError
57
+ raise "Connection terminated by remote server" unless transaction_complete
52
58
  rescue Net::FTPPermError
53
59
  raise "Error while communicating with the pacstream server"
54
60
  end
@@ -4,6 +4,7 @@ require 'rbook/isbn'
4
4
  require 'rbook/errors'
5
5
  require 'rbook/titlepage/titlepage_driver'
6
6
  require 'rbook/titlepage/client'
7
+ require 'rbook/titlepage/wwwclient'
7
8
 
8
9
  module RBook
9
10
 
@@ -0,0 +1,96 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + "/../")
2
+
3
+ require 'rbook/isbn'
4
+ require 'rbook/errors'
5
+
6
+ module RBook
7
+ module TitlePage
8
+
9
+ # You should be aware of any limits of query volume imposed by the provider - currently a
10
+ # maximum of 30 queries per minute is permitted.
11
+ class WWWClient
12
+
13
+ TITLEPAGE_DOMAIN = "www.titlepage.com"
14
+ @@uri = nil
15
+
16
+ def initialize
17
+ end
18
+
19
+ def get_onix_file(isbn)
20
+ isbn = RBook::ISBN.convert_to_isbn13(isbn)
21
+ raise ArgumentError, 'Invalid ISBN supplied' if isbn.nil?
22
+
23
+ headers = { 'Cookie' => @cookie }
24
+
25
+ login_response = Net::HTTP.start(TITLEPAGE_DOMAIN, 80) do |http|
26
+ data = [
27
+ "posted=yes",
28
+ "quicksearch=#{isbn}",
29
+ "qsrchby=ean",
30
+ "detailed=Search"
31
+ ].join("&")
32
+ http.post('/results.php', data, headers)
33
+ end
34
+ regex = /onclick=\"bookPopUp\(\'(.+)\'\);\"/
35
+ code = login_response.body.match(regex)
36
+ if code.nil?
37
+ return nil
38
+ else
39
+ code = code[1]
40
+ end
41
+ onix_file = Net::HTTP.start(TITLEPAGE_DOMAIN, 80) do |http|
42
+ data = [
43
+ "download=Download",
44
+ "rr=#{code}"
45
+ ].join("&")
46
+ http.post('/detail.php', data, headers)
47
+ end
48
+ return onix_file.body
49
+ end
50
+
51
+ # login to the titlepage website.
52
+ def login(username, password)
53
+ login_response = Net::HTTP.start(TITLEPAGE_DOMAIN, 80) do |http|
54
+ data = [
55
+ "usr=#{username}",
56
+ "pwd=#{password}",
57
+ "login=Login"
58
+ ].join("&")
59
+ http.post('/index.php', data)
60
+ end
61
+ @cookie = login_response['set-cookie']
62
+ end
63
+
64
+ # logout from the titlepage API
65
+ def logout
66
+ if @cookie
67
+ login_response = Net::HTTP.start(TITLEPAGE_DOMAIN, 80) do |http|
68
+ http.get("/logout.php")
69
+ end
70
+ @cookie = nil
71
+ end
72
+ end
73
+
74
+ # a convenience method to make queries to title page a little cleaner. This function
75
+ # essentially calls the login and logout functions for you automatically.
76
+ #
77
+ # RBook::TitlePage::WWWClient.open("username","password") do |tp|
78
+ # result = tp.get_onix_file("9780091835132")
79
+ # end
80
+ def self.open(username, password)
81
+
82
+ tp = self.new
83
+
84
+ begin
85
+ tp.login(username, password)
86
+
87
+ yield(tp)
88
+
89
+ ensure
90
+ tp.logout
91
+ end
92
+ end
93
+
94
+ end
95
+ end
96
+ end
@@ -59,7 +59,7 @@ module RBook
59
59
  scrapers.each do |scraper|
60
60
  worker = scraper.new
61
61
  result = worker.get_info(isbn)
62
- if !result.nil? && search_type.eql(:first)
62
+ if !result.nil? && search_type.eql?(:first)
63
63
  return result
64
64
  elsif !result.nil?
65
65
  results << result
@@ -0,0 +1,62 @@
1
+
2
+ module RBook
3
+ module WWW
4
+
5
+ class BarnesAndNobleScraper < Base
6
+
7
+ SCRAPER_ID = :barnesandnoble
8
+ SCRAPER_NAME = "Barnes and Noble".freeze
9
+ SCRAPER_SITE = "http://www.barnesandnole.com/".freeze
10
+
11
+ add_scraper( self )
12
+
13
+ def get_info(isbn)
14
+
15
+ @protocol = "http://"
16
+ @host = "search.barnesandnoble.com"
17
+ @path = "/booksearch/isbninquiry.asp?z=y&cds2Pid=9481&isbn="
18
+ @imgviewer_path = "/booksearch/imageviewer.asp?z=y&ean="
19
+ @link = @protocol + @host + @path + ISBN::convert_to_isbn10(isbn)
20
+ @imgviewer_link = @protocol + @host + @imgviewer_path + ISBN::convert_to_isbn10(isbn)
21
+
22
+ main = Scraper.define do
23
+ process "h1#title", :title => :text
24
+ process "h2#contributor>a", :author => :text
25
+ process "li.format", :form => :text
26
+ process "div#coverImage>a>noscript>img", :cover_thumb => "@src"
27
+ result :title, :author, :form, :cover_thumb
28
+ end
29
+
30
+ imgscraper = Scraper.define do
31
+ process "div>img[alt=Cover Image]", :cover_large => "@src"
32
+ result :cover_large
33
+ end
34
+
35
+ content = Net::HTTP.get URI.parse(@link)
36
+ result = main.scrape(content)
37
+ if result.title.nil?
38
+ return nil
39
+ else
40
+
41
+ info = {}
42
+ info[:isbn] = isbn
43
+ info[:title] = result.title unless result.title.nil?
44
+ info[:author] = result.author unless result.author.nil?
45
+ info[:format] = result.form unless result.form.nil?
46
+ info[:cover_thumb] = result.cover_thumb
47
+ info[:link] = @link
48
+ info[:from_name] = SCRAPER_NAME
49
+ info[:from_url] = SCRAPER_SITE
50
+
51
+ content = Net::HTTP.get URI.parse(@imgviewer_link)
52
+ result = imgscraper.scrape(content)
53
+
54
+ info[:cover_large] = result unless result.nil?
55
+
56
+ return info
57
+ end
58
+ end
59
+
60
+ end
61
+ end
62
+ end
@@ -26,6 +26,9 @@ class POTest < Test::Unit::TestCase
26
26
  assert_kind_of RBook::Bisac::PO, msg
27
27
  assert_equal msg.items.size, 36
28
28
 
29
+ assert_equal "Finding Sanctuary :Monastic St", msg.items.first.title
30
+ assert_equal "JAMISON ABBOT CHRISTOPH", msg.items.first.author
31
+
29
32
  validate_msg(msg)
30
33
  end
31
34
 
@@ -32,6 +32,8 @@ include RBook
32
32
  assert_equal ISBN::valid_isbn10?('020161622X'), true
33
33
  assert_equal ISBN::valid_isbn10?('020161622'), false
34
34
  assert_equal ISBN::valid_isbn10?('023252565X'), true
35
+ assert_equal ISBN::valid_isbn10?('023252565x'), true
36
+ assert_equal ISBN::valid_isbn10?('020-161-622-X'), true
35
37
  assert_equal ISBN::valid_isbn10?('9780764812200'), false
36
38
  assert_equal ISBN::valid_isbn10?('12345'), false
37
39
  assert_equal ISBN::valid_isbn10?('12345 7890'), false
@@ -49,6 +51,7 @@ include RBook
49
51
  assert_equal ISBN::valid_isbn13?('9780201616224'), true
50
52
  assert_equal ISBN::valid_isbn13?('978020161622'), false
51
53
  assert_equal ISBN::valid_isbn13?('9780764812200'), true
54
+ assert_equal ISBN::valid_isbn13?('978-02016-1622-4'), true
52
55
  assert_equal ISBN::valid_isbn13?('978076481220'), false
53
56
  assert_equal ISBN::valid_isbn13?('978 NCR 4611'), false
54
57
  assert_equal ISBN::valid_isbn13?('12345'), false
@@ -121,8 +124,9 @@ include RBook
121
124
  assert_equal ISBN::convert_to_isbn13('0764812203'), '9780764812200'
122
125
  assert_equal ISBN::convert_to_isbn13('1856075338'), '9781856075336'
123
126
  assert_equal ISBN::convert_to_isbn13('023252565X'), '9780232525656'
127
+ assert_equal ISBN::convert_to_isbn13('023252565x'), '9780232525656'
124
128
  assert_equal ISBN::convert_to_isbn13('1863951342'), '9781863951340'
125
- assert_equal ISBN::convert_to_isbn13('186-395-134-2'), nil
129
+ assert_equal ISBN::convert_to_isbn13('186-395-134-2'), '9781863951340'
126
130
 
127
131
  #already isbn13
128
132
  assert_equal ISBN::convert_to_isbn13('9781856075336'), '9781856075336'
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.0
2
+ rubygems_version: 0.9.1
3
3
  specification_version: 1
4
4
  name: rbook
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.4.1
7
- date: 2006-11-20 00:00:00 +11:00
6
+ version: 0.4.3
7
+ date: 2007-01-25 00:00:00 +11:00
8
8
  summary: A collection of classes and modules for working with bibliographic data
9
9
  require_paths:
10
10
  - lib
@@ -31,15 +31,15 @@ authors:
31
31
  files:
32
32
  - examples/www
33
33
  - examples/onix
34
- - examples/43.ord
35
34
  - examples/titlepage.rb
36
35
  - examples/pacstream.rb
37
36
  - examples/gbip.rb
37
+ - examples/titlepage_www.rb
38
38
  - examples/titlepage_with_proxy.rb
39
- - examples/www/list.rb
40
39
  - examples/www/find_cover_from_amazon.rb
41
40
  - examples/www/find_url_from_rainbow.rb
42
41
  - examples/www/find_all.rb
42
+ - examples/www/list.rb
43
43
  - examples/onix/stream_reader.rb
44
44
  - lib/rbook
45
45
  - lib/rbook/bisac
@@ -47,8 +47,8 @@ files:
47
47
  - lib/rbook/www
48
48
  - lib/rbook/onix
49
49
  - lib/rbook/titlepage
50
- - lib/rbook/titlepage.rb
51
50
  - lib/rbook/onix.rb
51
+ - lib/rbook/titlepage.rb
52
52
  - lib/rbook/pacstream.rb
53
53
  - lib/rbook/bisac.rb
54
54
  - lib/rbook/gbip.rb
@@ -57,14 +57,16 @@ files:
57
57
  - lib/rbook/errors.rb
58
58
  - lib/rbook/bisac/po.rb
59
59
  - lib/rbook/bisac/product.rb
60
- - lib/rbook/bisac/message.rb
61
60
  - lib/rbook/bisac/po_line_item.rb
61
+ - lib/rbook/bisac/message.rb
62
62
  - lib/rbook/gbip/pos.rb
63
- - lib/rbook/www/wiley_us_scraper.rb
63
+ - lib/rbook/gbip/title.rb
64
+ - lib/rbook/gbip/warehouse.rb
64
65
  - lib/rbook/www/hha_scraper.rb
65
- - lib/rbook/www/random_au_scraper.rb
66
+ - lib/rbook/www/ban_scraper.rb
67
+ - lib/rbook/www/wiley_us_scraper.rb
66
68
  - lib/rbook/www/oup_scraper.rb
67
- - lib/rbook/www/pearson_au_scraper.rb
69
+ - lib/rbook/www/random_au_scraper.rb
68
70
  - lib/rbook/www/penguin_scraper.rb
69
71
  - lib/rbook/www/harper_au_scraper.rb
70
72
  - lib/rbook/www/aau_scraper.rb
@@ -76,9 +78,9 @@ files:
76
78
  - lib/rbook/www/random_us_scraper.rb
77
79
  - lib/rbook/www/harper_us_scraper.rb
78
80
  - lib/rbook/www/base.rb
81
+ - lib/rbook/www/pearson_au_scraper.rb
79
82
  - lib/rbook/www/macmillan_scraper.rb
80
83
  - lib/rbook/onix/lists
81
- - lib/rbook/onix/sales_restriction.rb
82
84
  - lib/rbook/onix/stream_reader.rb
83
85
  - lib/rbook/onix/lists.rb
84
86
  - lib/rbook/onix/supply_detail.rb
@@ -87,39 +89,41 @@ files:
87
89
  - lib/rbook/onix/xchar.rb
88
90
  - lib/rbook/onix/stream_writer.rb
89
91
  - lib/rbook/onix/contributor.rb
90
- - lib/rbook/onix/lists/contributor_role.rb
92
+ - lib/rbook/onix/sales_restriction.rb
91
93
  - lib/rbook/onix/lists/product_form.rb
94
+ - lib/rbook/onix/lists/contributor_role.rb
92
95
  - lib/rbook/titlepage/client.rb
93
96
  - lib/rbook/titlepage/titlepage_utils.rb
97
+ - lib/rbook/titlepage/wwwclient.rb
94
98
  - lib/rbook/titlepage/titlepage_driver.rb
95
99
  - test/unit
96
100
  - test/data
97
101
  - test/mocks
102
+ - test/unit/bisac
98
103
  - test/unit/onix
99
104
  - test/unit/titlepage_test.rb
100
105
  - test/unit/isbn_test.rb
101
- - test/unit/bisac
102
- - test/unit/onix/sales_restriction_test.rb
106
+ - test/unit/bisac/po_test.rb
107
+ - test/unit/bisac/bisac_test.rb
108
+ - test/unit/bisac/po_line_item_test.rb
103
109
  - test/unit/onix/supply_detail_test.rb
104
110
  - test/unit/onix/product_test.rb
105
111
  - test/unit/onix/message_test.rb
106
112
  - test/unit/onix/xchar_test.rb
107
113
  - test/unit/onix/stream_writer_test.rb
108
114
  - test/unit/onix/contributor_test.rb
115
+ - test/unit/onix/sales_restriction_test.rb
109
116
  - test/unit/onix/stream_reader_test.rb
110
- - test/unit/bisac/bisac_test.rb
111
- - test/unit/bisac/po_test.rb
112
- - test/unit/bisac/po_line_item_test.rb
113
- - test/data/xml_not_onix.xml
114
117
  - test/data/abingdon.xml
115
- - test/data/invalid_no_product.xml
116
118
  - test/data/single_product.xml
119
+ - test/data/invalid_no_product.xml
117
120
  - test/data/chalice.xml
118
121
  - test/data/not_xml.csv
119
- - test/data/valid_bisac.txt
122
+ - test/data/xml_not_onix.xml
123
+ - test/data/bisac_po.txt
120
124
  - test/data/eerdsman.xml
121
125
  - test/data/augsburg.xml
122
- - test/data/bisac_po.txt
126
+ - test/data/valid_bisac.txt
123
127
  - test/mocks/titlepage_driver.rb
124
128
  - Rakefile
125
129
  - README
@@ -1,18 +0,0 @@
1
- H,1111111,9021000,,14977,,,,061120,,,,,,,,,,,
2
- D,,,9780140441147,,2,,,0.00,,,,
3
- D,,,9780142405369,,1,,,0.00,,,,
4
- D,,,9780143300373,,1,,,0.00,,,,
5
- D,,,9780143300380,,1,,,0.00,,,,
6
- D,,,9780349115320,,2,,,0.00,,,,
7
- D,,,9780751536829,,2,,,0.00,,,,
8
- D,,,9780756614690,,1,,,0.00,,,,
9
- D,,,9780782417173,,6,,,0.00,,,,
10
- D,,,9780782417340,,9,,,0.00,,,,
11
- D,,,9780782442977,,6,,,0.00,,,,
12
- D,,,9780782443004,,3,,,0.00,,,,
13
- D,,,9780785263135,,1,,,0.00,,,,
14
- D,,,9780785283546,,1,,,0.00,,,,
15
- D,,,9781405303255,,1,,,0.00,,,,
16
- D,,,9781920885151,,10,,,0.00,,,,
17
- D,,,9781921145346,,1,,,0.00,,,,
18
- S,16,,