rbook 0.3 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
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.3"
8
+ PKG_VERSION = "0.4.1"
9
9
  PKG_NAME = "rbook"
10
10
  PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
11
11
  RUBYFORGE_PROJECT = 'rbook'
@@ -49,7 +49,7 @@ spec = Gem::Specification.new do |spec|
49
49
  ["Rakefile"]
50
50
 
51
51
  spec.require_path = "lib"
52
-
52
+ spec.bindir = "bin"
53
53
  spec.test_files = Dir[ "test/test_*.rb" ]
54
54
  spec.has_rdoc = true
55
55
  spec.extra_rdoc_files = %w{README COPYING LICENSE}
data/examples/43.ord ADDED
@@ -0,0 +1,18 @@
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,,
@@ -7,7 +7,8 @@ require File.dirname(__FILE__) + '/../lib/rbook/pacstream'
7
7
 
8
8
  counter = 0
9
9
 
10
- RBook::Pacstream.get(:orders, :username => "myusername", :password => "mypass") do |order|
11
- File.open("#{counter.to_s}.ord", "w") { |f| f.puts order }
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
12
13
  counter += 1
13
14
  end
@@ -0,0 +1,14 @@
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
+
8
+ RBook::TitlePage::Client.use_proxy("druby://127.0.0.1:61676")
9
+
10
+ RBook::TitlePage::Client.open("username", "password") do |tp|
11
+
12
+ puts tp.find("0091835135").product.title.titleText
13
+
14
+ end
data/lib/rbook/bisac.rb CHANGED
@@ -2,6 +2,8 @@ $LOAD_PATH.unshift(File.dirname(__FILE__) + "/../")
2
2
 
3
3
  require 'rbook/bisac/message'
4
4
  require 'rbook/bisac/product'
5
+ require 'rbook/bisac/po'
6
+ require 'rbook/bisac/po_line_item'
5
7
  require 'rbook/isbn'
6
8
 
7
9
  module RBook
@@ -0,0 +1,87 @@
1
+ require File.dirname(__FILE__) + '/po_line_item'
2
+ require File.dirname(__FILE__) + '/../errors'
3
+
4
+ module RBook
5
+ module Bisac
6
+
7
+ # Represents a single BISAC purchase order
8
+ class PO
9
+
10
+ attr_accessor :source_san, :source_suffix, :source_name
11
+ attr_accessor :date, :filename, :format_version
12
+ attr_accessor :destination_san, :destination_suffix
13
+ attr_accessor :po_number, :cancellation_date, :backorder
14
+ attr_accessor :do_not_exceed_action, :do_not_exceed_amount
15
+ attr_accessor :invoice_copies, :special_instructions
16
+ attr_accessor :do_not_ship_before
17
+ attr_accessor :items
18
+
19
+ # creates a new RBook::Bisac::PO object
20
+ def initialize
21
+ @items = []
22
+ end
23
+
24
+ # reads a bisac text file into memory. input should be a string
25
+ # that specifies the file path
26
+ def self.load_from_file(input)
27
+ raise RBook::InvalidFileError, 'Invalid file' unless File.exist?(input)
28
+ data = []
29
+ File.open(input) do |f|
30
+ f.each_line { |l| data << l }
31
+ end
32
+ return self.build_message(data)
33
+ end
34
+
35
+ # creates a RBook::Bisac::PO object from a string. Input should
36
+ # be a complete bisac file as a string
37
+ def self.load_from_string(input)
38
+ data = input.split("\n")
39
+ return self.build_message(data)
40
+ end
41
+
42
+ private
43
+
44
+ def self.build_message(data)
45
+ raise Rbook::InvalidFileError, 'File appears to be too short' unless data.size >= 3
46
+ raise RBook::InvalidFileError, 'Missing header information' unless data[0][0,2].eql?("00")
47
+ raise RBook::InvalidFileError, 'Missing footer information' unless data[-1][0,2].eql?("90")
48
+
49
+ msg = PO.new
50
+
51
+ data.each do |line|
52
+
53
+ case line[0,2]
54
+ when "00" # first header
55
+ msg.source_san = line[7,7].strip
56
+ msg.source_suffix = line[14,5].strip
57
+ msg.source_name = line[19,13].strip
58
+ msg.date = line[32,6].strip
59
+ msg.filename = line[38,20].strip
60
+ msg.format_version = line[60,3].strip
61
+ msg.destination_san = line[63,7].strip
62
+ msg.destination_suffix = line[70,5].strip
63
+ when "10" # second header
64
+ msg.po_number = line[7, 12].strip
65
+ msg.cancellation_date = line[50,6].strip
66
+ msg.backorder = line[56,1].eql?("Y") ? true : false
67
+ msg.do_not_exceed_action = line[57,1].strip
68
+ msg.do_not_exceed_amount = line[58,7].strip
69
+ msg.invoice_copies = line[65,2].strip
70
+ msg.special_instructions = line[67,1].eql?("Y") ? true : false
71
+ msg.do_not_ship_before = line[73,6].strip
72
+ when "40" # line item
73
+ # load each lineitem into the message
74
+ item = RBook::Bisac::POLineItem.load_from_string(line)
75
+ msg.items << item
76
+ when "90" # footer
77
+ # check the built objects match the file
78
+ end
79
+
80
+ end
81
+
82
+ # return the results
83
+ return msg
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,32 @@
1
+ require 'bigdecimal'
2
+
3
+ module RBook
4
+ module Bisac
5
+
6
+ # represents a single line on the purchase order. Has attributes like
7
+ # price, qty and description
8
+ class POLineItem
9
+
10
+ attr_accessor :sequence_number, :po_number, :line_item_number
11
+ attr_accessor :isbn, :qty, :catalogue_code, :price
12
+
13
+ # returns a new RBook::Bisac::POLineItem object using the data passed in as a string
14
+ # refer to the bisac spec for the expected format of the string
15
+ def self.load_from_string(data)
16
+ item = self.new
17
+
18
+ item.sequence_number = data[2,5].to_i
19
+ item.po_number = data[7,13].strip
20
+ item.line_item_number = data[21,10].strip
21
+ item.isbn = data[31,10].strip
22
+ item.qty = data[41,5].to_i
23
+ item.catalogue_code = data[46,1].strip
24
+ item.price = BigDecimal.new(data[47,6])
25
+
26
+ return item
27
+ end
28
+
29
+ end
30
+ end
31
+
32
+ end
data/lib/rbook/errors.rb CHANGED
@@ -3,5 +3,6 @@ module RBook
3
3
 
4
4
  class InvalidRubyVersionError < RuntimeError; end
5
5
  class NotLoggedInError < RuntimeError; end
6
+ class InvalidFileError < RuntimeError; end
6
7
 
7
8
  end
@@ -1,6 +1,7 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__) + "/../")
2
2
 
3
3
  require 'net/ftp'
4
+ require 'tempfile'
4
5
 
5
6
  module RBook
6
7
 
@@ -36,18 +37,20 @@ module RBook
36
37
 
37
38
  begin
38
39
  Net::FTP.open(server) do |ftp|
40
+ file_regexp = Regexp.new(".*\.#{FILE_EXTENSIONS[type]}$", Regexp::IGNORECASE)
39
41
  ftp.login(args[0][:username], args[0][:password])
40
42
  ftp.chdir("outgoing/")
41
43
  ftp.nlst.each do |file|
42
- if file.match(/.*\.#{FILE_EXTENSIONS[type]}$/)
43
- content = ""
44
- ftp.gettextfile(file) {|line| content << line << "\n"}
45
- yield content
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)
46
49
  end
47
50
  end
48
51
  end
49
52
  rescue Net::FTPPermError
50
- raise "Error loging onto pactream server"
53
+ raise "Error while communicating with the pacstream server"
51
54
  end
52
55
  end
53
56
 
@@ -3,6 +3,7 @@ $LOAD_PATH.unshift(File.dirname(__FILE__) + "/../")
3
3
  require 'rbook/isbn'
4
4
  require 'rbook/errors'
5
5
  require 'rbook/titlepage/titlepage_driver'
6
+ require 'drb'
6
7
 
7
8
  module RBook
8
9
  module TitlePage
@@ -16,6 +17,25 @@ module RBook
16
17
  # For a basic usage overview, check out RBook::TitlePage
17
18
  class Client
18
19
 
20
+ @@uri = nil
21
+
22
+ # Tells all instances of this class to query the titlepage API via a Distributed Ruby
23
+ # proxy. This is useful where multiple machines need to make queries and you need to be
24
+ # careful not to exceed the maximum query rate.
25
+ #
26
+ # There is an example proxy executable available in the bin/ directory of rbook.
27
+ #
28
+ # Assuming the proxy is running on port 61676 of the local machine, the following
29
+ # code can be used to query titlepage:
30
+ #
31
+ # RBook::TitlePage::Client.use_proxy("druby://127.0.0.1:61676")
32
+ # RBook::TitlePage::Client.open("username", "password") do |tp|
33
+ # puts tp.find("0091835135").product.title.titleText
34
+ # end
35
+ def self.use_proxy(uri)
36
+ @@uri = uri
37
+ end
38
+
19
39
  # Optional driver parameter allows an alternative SOAP driver to the default to be specified.
20
40
  # This is primarily for testing purposes and probably isn't useful to anyone in the real world.
21
41
  def initialize(driver = nil)
@@ -27,24 +47,37 @@ module RBook
27
47
  def login(username, password)
28
48
  raise InvalidRubyVersionError, 'Ruby 1.8.3 or higher is required to use this class' unless RUBY_VERSION >= "1.8.3"
29
49
  logout if @token
30
- @token = @driver.login(username, password)
31
- return true if @token
50
+ @username = username
51
+ @password = password
52
+ unless @@uri
53
+ @token = @driver.login(username, password)
54
+ return true if @token
55
+ end
32
56
  end
33
57
 
34
58
  # logout from the titlepage API
35
59
  def logout
36
- if @token
60
+ @username = nil
61
+ @password = nil
62
+ if @token and @@uri != nil
37
63
  @driver.logout(@token)
64
+ else
65
+ true
38
66
  end
39
67
  end
40
68
 
41
69
  # retrieve information on a specified ISBN
42
70
  def find(isbn)
43
- return NotLoggedInError, 'You must login to titlepage API before performing a search' unless @token
71
+ return NotLoggedInError, 'You must login to titlepage API before performing a search' unless @token || @@uri
44
72
  isbn = ISBN::convert_to_isbn13(isbn)
45
73
  return nil if isbn.nil?
46
74
  begin
47
- result = @driver.SearchByEAN(@token, isbn)
75
+ if @@uri
76
+ proxy = DRbObject.new_with_uri(@@uri)
77
+ result = proxy.find(@username, @password, isbn)
78
+ else
79
+ result = @driver.SearchByEAN(@token, isbn)
80
+ end
48
81
  if result.Product.nil?
49
82
  return nil
50
83
  else
@@ -0,0 +1,112 @@
1
+ 00000019013725 Rainbow Book 061112INTERNET.BSC F039021000
2
+ 1000002 14976 9013725 9021000 061112000000Y 000000001N00020000000
3
+ 4000003 14976 Y000000000102978513220000100000000000000000000550000000
4
+ 4100004 14976 Finding Sanctuary :Monastic St
5
+ 4200005 14976 JAMISON ABBOT CHRISTOPH
6
+ 4000006 14976 Y000000000203407855780000100000000000000000000550000000
7
+ 4100007 14976 In My Own Words: Padre Pio
8
+ 4200008 14976 CHIFFOLO ANTHONY
9
+ 4000009 14976 Y000000000303408635440000100000000000000000000550000000
10
+ 4100010 14976 Knowing God New Edn.With Study
11
+ 4200011 14976 PACKER J I
12
+ 4000012 14976 Y000000000403409111580000100000000000000000000550000000
13
+ 4100013 14976 Everyone I See Is Luckier Than
14
+ 4200014 14976 BEVAN CLARE
15
+ 4000015 14976 Y000000000503409111740000100000000000000000000550000000
16
+ 4100016 14976 I Want To Shout And Stamp Abou
17
+ 4200017 14976 MITTON TONY
18
+ 4000018 14976 Y000000000605670406230000100000000000000000000550000000
19
+ 4100019 14976 Gnostics :Identifying an Ancie
20
+ 4200020 14976 LOGAN, ALASTAIR
21
+ 4000021 14976 Y000000000705670875140000100000000000000000000550000000
22
+ 4100022 14976 Mary For All Christians
23
+ 4200023 14976 MACQUARRIE J
24
+ 4000024 14976 Y000000000806425620750000100000000000000000000550000000
25
+ 4100025 14976 Forgiveness and Other Acts of
26
+ 4200026 14976 DOWRICK STEPHANIE
27
+ 4000027 14976 Y000000000907333174560000100000000000000000000550000000
28
+ 4100028 14976 Honey and The Fires: Ancient s
29
+ 4200029 14976 PULVERS ROGER & ALICE
30
+ 4000030 14976 Y000000001007333179600000100000000000000000000550000000
31
+ 4100031 14976 Mummy Book
32
+ 4200032 14976 PARR TODD
33
+ 4000033 14976 Y000000001107333198230000100000000000000000000550000000
34
+ 4100034 14976 So Many Selves
35
+ 4200035 14976 CAREY GABRIELLE
36
+ 4000036 14976 Y000000001207336159880000100000000000000000000550000000
37
+ 4100037 14976 New Glucose Revolution Pocket
38
+ 4200038 14976 MILLET ET AL
39
+ 4000039 14976 Y000000001307475413530000100000000000000000000550000000
40
+ 4100040 14976 Achieving Emotional Literacy
41
+ 4200041 14976 STEINER CLAUDE
42
+ 4000042 14976 Y000000001407499210990000100000000000000000000550000000
43
+ 4100043 14976 How Meditation Heals
44
+ 4200044 14976 HARRISON ERIC
45
+ 4000045 14976 Y000000001507499242170000100000000000000000000550000000
46
+ 4100046 14976 Other Side and Back :A Psychic
47
+ 4200047 14976 BROWNE SYLVIA
48
+ 4000048 14976 Y000000001607502213130000100000000000000000000550000000
49
+ 4100049 14976 I'm Worried :Your Emotions Pb
50
+ 4200050 14976 MOSES BRIAN
51
+ 4000051 14976 Y000000001707502213210000100000000000000000000550000000
52
+ 4100052 14976 It's Not Fair :Your Feelings P
53
+ 4200053 14976 MOSES BRIAN
54
+ 4000054 14976 Y000000001807538205440000100000000000000000000550000000
55
+ 4100055 14976 Memory and Identity :Personal
56
+ 4200056 14976 PAUL JOHN II
57
+ 4000057 14976 Y000000001908192198190000100000000000000000000550000000
58
+ 4100058 14976 Gift of Faith (Morehouse) :Sho
59
+ 4200059 14976 NEFF LAVONNE
60
+ 4000060 14976 Y0000000020082646520X0000200000000000000000000550000000
61
+ 4100061 14976 Pastoral Prayers
62
+ 4200062 14976 DEADMAN R
63
+ 4000063 14976 Y000000002108264685000000200000000000000000000550000000
64
+ 4100064 14976 Dignity of Difference P/B: How
65
+ 4200065 14976 SACKS JONATHAN
66
+ 4000066 14976 Y000000002208264733770000100000000000000000000550000000
67
+ 4100067 14976 Celebrating Life :Finding happ
68
+ 4200068 14976 SACKS JONATHAN
69
+ 4000069 14976 Y000000002308264748100000100000000000000000000550000000
70
+ 4100070 14976 From Optimism to Hope
71
+ 4200071 14976 SACKS JONATHAN
72
+ 4000072 14976 Y000000002408264785570000100000000000000000000550000000
73
+ 4100073 14976 Persistence of Faith :Religion
74
+ 4200074 14976 JONATHAN SACKS
75
+ 4000075 14976 Y000000002508264794210000100000000000000000000550000000
76
+ 4100076 14976 Shape of the Liturgy New Ed.
77
+ 4200077 14976 DIX GREGORY
78
+ 4000078 14976 Y000000002608601242580000200000000000000000000550000000
79
+ 4100079 14976 Essence of Prayer
80
+ 4200080 14976 BURROWS RUTH
81
+ 4000081 14976 Y000000002715633841400000100000000000000000000550000000
82
+ 4100082 14976 Theological Perspectives On Go
83
+ 4200083 14976 MILBANK & WRD
84
+ 4000084 14976 Y000000002817411479210000200000000000000000000550000000
85
+ 4100085 14976 David Suzuki
86
+ 4200086 14976 SUZUKI DAVID
87
+ 4000087 14976 Y000000002917411484640000100000000000000000000550000000
88
+ 4100088 14976 Holism and Complementary Medic
89
+ 4200089 14976 DI STEFANO VINCENT
90
+ 4000090 14976 Y000000003018418129270000100000000000000000000550000000
91
+ 4100091 14976 Personal power animals :for gu
92
+ 4200092 14976 GAUDING MADONNA
93
+ 4000093 14976 Y000000003118644894130000100000000000000000000550000000
94
+ 4100094 14976 Earth Time
95
+ 4200095 14976 SUZUKI DAVID
96
+ 4000096 14976 Y000000003218650838440000100000000000000000000550000000
97
+ 4100097 14976 Facing The Fifties
98
+ 4200098 14976 O'CONNOR PETER
99
+ 4000099 14976 Y000000003318650891760000100000000000000000000550000000
100
+ 4100100 14976 Long Way from Rome A: Why the
101
+ 4200101 14976 MCGILLION CHRIS (ED)
102
+ 4000102 14976 Y000000003418891089600000100000000000000000000550000000
103
+ 4100103 14976 14 Presentations for Fall (God
104
+ 4200104 14976 BERRYMAN JEROME W
105
+ 4000105 14976 Y000000003518891089790000100000000000000000000550000000
106
+ 4100106 14976 20 Presentations for Winter (G
107
+ 4200107 14976 BERRYMAN JEROME W
108
+ 4000108 14976 Y000000003618891089870000100000000000000000000550000000
109
+ 4100109 14976 20 Presentations for Spring (G
110
+ 4200110 14976 BERRYMAN JEROME W
111
+ 5000111 14976 0011000000000360000000040
112
+ 90001120000000000036000010000000040000010000100000000000003600001000000000000000
@@ -1,4 +1,4 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
 
3
3
  require 'test/unit'
4
4
  require 'rbook/bisac'
@@ -37,7 +37,7 @@ class BISACTest < Test::Unit::TestCase
37
37
  end
38
38
 
39
39
  def test_load_from_file
40
- msg = RBook::Bisac::Message.load(File.dirname(__FILE__) + "/../data/valid_bisac.txt")
40
+ msg = RBook::Bisac::Message.load(File.dirname(__FILE__) + "/../../data/valid_bisac.txt")
41
41
  assert_equal "SAND", msg.company
42
42
  assert_equal "9012982", msg.san
43
43
  assert_equal "000001", msg.batch
@@ -0,0 +1,38 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../../lib')
2
+
3
+ require 'test/unit'
4
+ require 'rbook/bisac'
5
+
6
+ class POLineItemTest < Test::Unit::TestCase
7
+
8
+ def setup
9
+ @row = "4000003 14976 Y000000000102978513220000100000000000000000000550000000"
10
+ end
11
+
12
+ # ensure the load_from_string method works as expected
13
+ def test_load_from_string
14
+ item = RBook::Bisac::POLineItem.load_from_string(@row)
15
+ assert_kind_of RBook::Bisac::POLineItem, item
16
+
17
+ assert_equal item.sequence_number, 3
18
+ assert_equal item.po_number, "14976"
19
+ assert_equal item.line_item_number, "0000000001"
20
+ assert_equal item.isbn, "0297851322"
21
+ assert_equal item.qty, 1
22
+ assert_equal item.catalogue_code, "0"
23
+ assert_equal item.price, 0
24
+ end
25
+
26
+ # ensure the load_from_file method throws the correct exceptions
27
+ # when it encounters a problem
28
+ def test_product_validation
29
+
30
+ #assert_raise(RVista::InvalidLineItemError) {
31
+ # item = RVista::LineItem.load_from_array(%w[D blah])
32
+ #}
33
+
34
+ end
35
+
36
+ end
37
+
38
+
@@ -0,0 +1,79 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../../lib')
2
+
3
+ require 'test/unit'
4
+ require 'rbook/bisac'
5
+
6
+ class POTest < Test::Unit::TestCase
7
+
8
+ VALID = File.dirname(__FILE__) + "/../../data/bisac_po.txt"
9
+ #INVALID_MISSING_HEADER = File.dirname(__FILE__) + "/../data/invalid_missing_header.txt"
10
+ #INVALID_MISSING_FOOTER = File.dirname(__FILE__) + "/../data/invalid_missing_footer.txt"
11
+ #INVALID_LINE = File.dirname(__FILE__) + "/../data/invalid_line.txt"
12
+ #INVALID_DOESNT_EXIST = File.dirname(__FILE__) + "/../data/blah.txt"
13
+
14
+ # ensure the load_from_file method works as expected
15
+ def test_load_from_file
16
+ msg = RBook::Bisac::PO.load_from_file(VALID)
17
+ assert_kind_of RBook::Bisac::PO, msg
18
+ assert_equal msg.items.size, 36
19
+
20
+ validate_msg(msg)
21
+ end
22
+
23
+ # ensure the load_from_file method works as expected
24
+ def test_load_from_string
25
+ msg = RBook::Bisac::PO.load_from_string(File.read(VALID))
26
+ assert_kind_of RBook::Bisac::PO, msg
27
+ assert_equal msg.items.size, 36
28
+
29
+ validate_msg(msg)
30
+ end
31
+
32
+ # ensure the load_from_file method throws the correct exceptions
33
+ # when it encounters a problem
34
+ def test_product_validation
35
+
36
+ #assert_raise(RVista::InvalidFileError) {
37
+ # msg = RVista::Message.load_from_file(INVALID_MISSING_HEADER)
38
+ #}
39
+
40
+ #assert_raise(RVista::InvalidFileError) {
41
+ # msg = RVista::Message.load_from_file(INVALID_MISSING_FOOTER)
42
+ #}
43
+
44
+ #assert_raise(RVista::InvalidLineItemError) {
45
+ # msg = RVista::Message.load_from_file(INVALID_LINE)
46
+ #}
47
+
48
+ #assert_raise(RVista::InvalidFileError) {
49
+ # msg = RVista::Message.load_from_file(INVALID_DOESNT_EXIST)
50
+ #}
51
+
52
+ end
53
+
54
+ private
55
+
56
+ # ensures the properties of the supplied RVista::Message object
57
+ # match the properties specified in the VALID file
58
+ def validate_msg(msg)
59
+ assert_equal msg.source_san, "9013725"
60
+ assert_equal msg.source_suffix, ""
61
+ assert_equal msg.source_name, "Rainbow Book"
62
+ assert_equal msg.date, "061112"
63
+ assert_equal msg.filename, "INTERNET.BSC"
64
+ assert_equal msg.format_version, "F03"
65
+ assert_equal msg.destination_san, "9021000"
66
+ assert_equal msg.destination_suffix, ""
67
+ assert_equal msg.po_number, "14976"
68
+ assert_equal msg.cancellation_date, "000000"
69
+ assert_equal msg.backorder, true
70
+ assert_equal msg.do_not_exceed_action, ""
71
+ assert_equal msg.do_not_exceed_amount, "0000000"
72
+ assert_equal msg.invoice_copies, "01"
73
+ assert_equal msg.special_instructions, false
74
+ assert_equal msg.do_not_ship_before, "000000"
75
+ end
76
+
77
+ end
78
+
79
+
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: rbook
5
5
  version: !ruby/object:Gem::Version
6
- version: "0.3"
7
- date: 2006-10-25 00:00:00 +10:00
6
+ version: 0.4.1
7
+ date: 2006-11-20 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,28 +31,35 @@ authors:
31
31
  files:
32
32
  - examples/www
33
33
  - examples/onix
34
+ - examples/43.ord
34
35
  - examples/titlepage.rb
35
- - examples/gbip.rb
36
36
  - examples/pacstream.rb
37
+ - examples/gbip.rb
38
+ - examples/titlepage_with_proxy.rb
37
39
  - examples/www/list.rb
38
40
  - examples/www/find_cover_from_amazon.rb
39
41
  - examples/www/find_url_from_rainbow.rb
40
42
  - examples/www/find_all.rb
41
43
  - examples/onix/stream_reader.rb
42
44
  - lib/rbook
45
+ - lib/rbook/bisac
46
+ - lib/rbook/gbip
43
47
  - lib/rbook/www
44
48
  - lib/rbook/onix
45
49
  - lib/rbook/titlepage
46
50
  - lib/rbook/titlepage.rb
47
51
  - lib/rbook/onix.rb
48
- - lib/rbook/errors.rb
52
+ - lib/rbook/pacstream.rb
49
53
  - lib/rbook/bisac.rb
54
+ - lib/rbook/gbip.rb
50
55
  - lib/rbook/www.rb
51
56
  - lib/rbook/isbn.rb
52
- - lib/rbook/bisac
53
- - lib/rbook/gbip
54
- - lib/rbook/pacstream.rb
55
- - lib/rbook/gbip.rb
57
+ - lib/rbook/errors.rb
58
+ - lib/rbook/bisac/po.rb
59
+ - lib/rbook/bisac/product.rb
60
+ - lib/rbook/bisac/message.rb
61
+ - lib/rbook/bisac/po_line_item.rb
62
+ - lib/rbook/gbip/pos.rb
56
63
  - lib/rbook/www/wiley_us_scraper.rb
57
64
  - lib/rbook/www/hha_scraper.rb
58
65
  - lib/rbook/www/random_au_scraper.rb
@@ -71,38 +78,38 @@ files:
71
78
  - lib/rbook/www/base.rb
72
79
  - lib/rbook/www/macmillan_scraper.rb
73
80
  - lib/rbook/onix/lists
74
- - lib/rbook/onix/product.rb
75
- - lib/rbook/onix/lists.rb
76
81
  - lib/rbook/onix/sales_restriction.rb
82
+ - lib/rbook/onix/stream_reader.rb
83
+ - lib/rbook/onix/lists.rb
77
84
  - lib/rbook/onix/supply_detail.rb
85
+ - lib/rbook/onix/product.rb
78
86
  - lib/rbook/onix/message.rb
79
87
  - lib/rbook/onix/xchar.rb
80
- - lib/rbook/onix/contributor.rb
81
- - lib/rbook/onix/stream_reader.rb
82
88
  - lib/rbook/onix/stream_writer.rb
89
+ - lib/rbook/onix/contributor.rb
83
90
  - lib/rbook/onix/lists/contributor_role.rb
84
91
  - lib/rbook/onix/lists/product_form.rb
85
92
  - lib/rbook/titlepage/client.rb
86
93
  - lib/rbook/titlepage/titlepage_utils.rb
87
94
  - lib/rbook/titlepage/titlepage_driver.rb
88
- - lib/rbook/bisac/product.rb
89
- - lib/rbook/bisac/message.rb
90
- - lib/rbook/gbip/pos.rb
91
95
  - test/unit
92
96
  - test/data
93
97
  - test/mocks
94
98
  - test/unit/onix
95
99
  - test/unit/titlepage_test.rb
96
- - test/unit/bisac_test.rb
97
100
  - test/unit/isbn_test.rb
101
+ - test/unit/bisac
98
102
  - test/unit/onix/sales_restriction_test.rb
99
103
  - test/unit/onix/supply_detail_test.rb
100
104
  - test/unit/onix/product_test.rb
101
105
  - test/unit/onix/message_test.rb
102
106
  - test/unit/onix/xchar_test.rb
103
- - test/unit/onix/contributor_test.rb
104
107
  - test/unit/onix/stream_writer_test.rb
108
+ - test/unit/onix/contributor_test.rb
105
109
  - 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
106
113
  - test/data/xml_not_onix.xml
107
114
  - test/data/abingdon.xml
108
115
  - test/data/invalid_no_product.xml
@@ -112,6 +119,7 @@ files:
112
119
  - test/data/valid_bisac.txt
113
120
  - test/data/eerdsman.xml
114
121
  - test/data/augsburg.xml
122
+ - test/data/bisac_po.txt
115
123
  - test/mocks/titlepage_driver.rb
116
124
  - Rakefile
117
125
  - README