bisac 0.9 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -1,6 +1,7 @@
1
1
  The Book Industry Standards and Communications (BISAC) Group is a US body that
2
2
  among other things, has defined a set of plain text data formats for electronic
3
- data exchange within the book industry.
3
+ data exchange within the book industry. These formats are now deprecated, but
4
+ are still in use in some place (including segments of the Australian market).
4
5
 
5
6
  This set of classes are just convenience wrappers around some of those formats,
6
7
  designed to make reading and writing them just a little less painful.
data/Rakefile CHANGED
@@ -6,7 +6,7 @@ require 'rake/testtask'
6
6
  require "rake/gempackagetask"
7
7
  require 'spec/rake/spectask'
8
8
 
9
- PKG_VERSION = "0.9"
9
+ PKG_VERSION = "0.9.1"
10
10
  PKG_NAME = "bisac"
11
11
  PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
12
12
  RUBYFORGE_PROJECT = 'rbook'
@@ -72,7 +72,8 @@ spec = Gem::Specification.new do |spec|
72
72
  spec.extra_rdoc_files = %w{README COPYING LICENSE}
73
73
  spec.rdoc_options << '--title' << 'bisac Documentation' <<
74
74
  '--main' << 'README' << '-q'
75
- spec.add_dependency('rbook-isbn', '>= 1.0')
75
+ spec.add_dependency('isbn10', '>= 1.0')
76
+ spec.add_dependency('ean13', '>= 1.0')
76
77
  spec.author = "James Healy"
77
78
  spec.email = "jimmy@deefa.com"
78
79
  spec.rubyforge_project = "rbook"
@@ -10,7 +10,8 @@ require 'bisac/poa'
10
10
  require 'bisac/poa_line_item'
11
11
 
12
12
  # require rubygems
13
- require 'rbook/isbn'
13
+ require 'isbn10'
14
+ require 'ean13'
14
15
 
15
16
  # Ruby module for reading and writing BISAC file formats.
16
17
  module Bisac
@@ -37,7 +37,7 @@ module Bisac
37
37
  attr_accessor :do_not_ship_before
38
38
  attr_accessor :items
39
39
 
40
- # creates a new RBook::Bisac::PO object
40
+ # creates a new Bisac::PO object
41
41
  def initialize
42
42
  @items = []
43
43
 
@@ -50,7 +50,7 @@ module Bisac
50
50
  # reads a bisac text file into memory. input should be a string
51
51
  # that specifies the file path
52
52
  def self.load_from_file(input)
53
- $stderr.puts "WARNING: RBook::Bisac::PO.load_from_file is deprecated. It only returns the first PO in the file. use parse_file instead."
53
+ $stderr.puts "WARNING: Bisac::PO.load_from_file is deprecated. It only returns the first PO in the file. use parse_file instead."
54
54
  self.parse_file(input) { |msg| return msg }
55
55
  return nil
56
56
  end
@@ -98,7 +98,7 @@ module Bisac
98
98
  yield self.build_message(data) if data.size > 0
99
99
  end
100
100
 
101
- # creates a RBook::Bisac::PO object from a string. Input should
101
+ # creates a Bisac::PO object from a string. Input should
102
102
  # be a complete bisac file as a string
103
103
  def self.load_from_string(input)
104
104
  $stderr.puts "WARNING: Bisac::PO.load_from_string is deprecated. It only returns the first PO in the string. use parse_string instead."
@@ -152,8 +152,9 @@ module Bisac
152
152
  @items.each_with_index do |item, idx|
153
153
  item.line_item_number = idx + 1
154
154
  item.sequence_number = sequence
155
- lines += item.to_s.split("\n")
156
- sequence += 3
155
+ new_lines = item.to_s.split("\n")
156
+ lines += new_lines
157
+ sequence += new_lines.size
157
158
  end
158
159
 
159
160
  # PO control
@@ -173,11 +174,11 @@ module Bisac
173
174
  line[7,20] = @items.size.to_s.rjust(13,"0")
174
175
  line[20,5] = "00001" # total '10' (PO) records
175
176
  line[25,10] = total_qty.to_s.rjust(10,"0")
176
- line[35,5] = "00001" # number of '00'-'09' records
177
- line[40,5] = "00001" # number of '10'-'19' records
178
- line[55,5] = (@items.size * 3).to_s.rjust(5,"0") # number of '40'-'49' records
179
- line[60,5] = "00000" # number of '50'-'59' records
180
- line[65,5] = "00000" # number of '60'-'69' records
177
+ line[35,5] = lines.select { |l| l[0,1] == "0"}.size.to_s.rjust(5,"0") # number of '00'-'09' records
178
+ line[40,5] = lines.select { |l| l[0,1] == "0"}.size.to_s.rjust(5,"0") # number of '10'-'19' records
179
+ line[55,5] = lines.select { |l| l[0,1] == "4"}.size.to_s.rjust(5,"0") # number of '40'-'49' records
180
+ line[60,5] = lines.select { |l| l[0,1] == "5"}.size.to_s.rjust(5,"0") # number of '50'-'59' records
181
+ line[65,5] = lines.select { |l| l[0,1] == "6"}.size.to_s.rjust(5,"0") # number of '60'-'69' records
181
182
  lines << line
182
183
 
183
184
  lines.join("\n")
@@ -37,10 +37,10 @@ module Bisac
37
37
  end
38
38
 
39
39
  def isbn=(val)
40
- if RBook::ISBN.valid_isbn13?(val)
40
+ if EAN13.valid?(val)
41
41
  @isbn = val
42
- elsif RBook::ISBN.valid_isbn10?(val)
43
- @isbn = RBook::ISBN.convert_to_isbn13(val)
42
+ elsif ISBN10.valid?(val)
43
+ @isbn = ISBN10.new(val).to_ean
44
44
  else
45
45
  @isbn = val
46
46
  end
@@ -48,19 +48,19 @@ module Bisac
48
48
 
49
49
  # is the isbn for this product valid?
50
50
  def isbn?
51
- RBook::ISBN.valid_isbn13?(@isbn || "")
51
+ EAN13.valid?(@isbn)
52
52
  end
53
53
 
54
54
  def isbn10
55
- if isbn?
56
- RBook::ISBN.convert_to_isbn10(@isbn)
55
+ if isbn? && @isbn[0,3] == "978"
56
+ ISBN10.complete(@isbn[3,9])
57
57
  else
58
58
  @isbn
59
59
  end
60
60
  end
61
61
 
62
62
  def to_s
63
- lines = ["","",""]
63
+ lines = [""]
64
64
  lines[0] << "40"
65
65
  lines[0] << @sequence_number.to_s.rjust(5,"0")
66
66
  lines[0] << " "
@@ -79,21 +79,25 @@ module Bisac
79
79
  lines[0] << @isbn
80
80
  end
81
81
 
82
- lines << ""
83
- lines[1] << "41"
84
- lines[1] << (@sequence_number + 1).to_s.rjust(5,"0")
85
- lines[1] << " "
86
- lines[1] << @po_number.to_s.ljust(11," ")
87
- lines[1] << " "
88
- lines[1] << pad_trunc(@title, 30)
89
-
90
- lines << ""
91
- lines[2] << "42"
92
- lines[2] << (@sequence_number + 2).to_s.rjust(5,"0")
93
- lines[2] << " "
94
- lines[2] << @po_number.to_s.ljust(11," ")
95
- lines[2] << " " # TODO
96
- lines[2] << pad_trunc(@author, 30)
82
+ if @title && @title.to_s.size > 0
83
+ lines << ""
84
+ lines[1] << "41"
85
+ lines[1] << (@sequence_number + 1).to_s.rjust(5,"0")
86
+ lines[1] << " "
87
+ lines[1] << @po_number.to_s.ljust(11," ")
88
+ lines[1] << " "
89
+ lines[1] << pad_trunc(@title, 30)
90
+ end
91
+
92
+ if @author && @author.to_s.size > 0
93
+ lines << ""
94
+ lines[2] << "42"
95
+ lines[2] << (@sequence_number + 2).to_s.rjust(5,"0")
96
+ lines[2] << " "
97
+ lines[2] << @po_number.to_s.ljust(11," ")
98
+ lines[2] << " " # TODO
99
+ lines[2] << pad_trunc(@author, 30)
100
+ end
97
101
 
98
102
  lines.join("\n")
99
103
  end
@@ -45,8 +45,8 @@ module Bisac
45
45
  def isbn=(val)
46
46
  if val == ""
47
47
  @isbn = nil
48
- elsif RBook::ISBN.valid_isbn10?(val)
49
- @isbn = RBook::ISBN.convert_to_isbn13(val)
48
+ elsif ISBN10.valid?(val)
49
+ @isbn = ISBN10.new(val).to_ean
50
50
  else
51
51
  @isbn = val
52
52
  end
@@ -54,12 +54,12 @@ module Bisac
54
54
 
55
55
  # is the isbn for this product valid?
56
56
  def isbn?
57
- RBook::ISBN.valid_isbn13?(@isbn || "")
57
+ EAN13.valid?(@isbn || "")
58
58
  end
59
59
 
60
60
  def isbn10
61
- if isbn?
62
- RBook::ISBN.convert_to_isbn10(@isbn)
61
+ if isbn? && @isbn[0,3] == "978"
62
+ ISBN10.complete(@isbn[3,9])
63
63
  else
64
64
  @isbn
65
65
  end
@@ -4,7 +4,7 @@ require 'bisac'
4
4
 
5
5
  context "A new bisac object" do
6
6
 
7
- setup do
7
+ before(:each) do
8
8
  @valid_item1 = Bisac::Product.new("0743285689")
9
9
  @valid_item1.title = "Enemy Combatant"
10
10
  @valid_item1.author = "Begg, Moazzam"
@@ -4,7 +4,7 @@ require 'bisac'
4
4
 
5
5
  context "A new bisac purchase order line item object" do
6
6
 
7
- setup do
7
+ before(:each) do
8
8
  @valid_row = "4000003 14976 Y000000000102978513220000100000000000000000000550000000"
9
9
  @valid_row_two = "4000033 13424 Y000000001107538214940000200000000000000000000400000000 \n"
10
10
  @valid_isbn13_row = "4000003 14627 Y000000000103855198500000600000000000000000000400000000 9780385519854"
@@ -49,4 +49,25 @@ context "A new bisac purchase order line item object" do
49
49
  lambda { Bisac::POLineItem.load_from_string(@invalid_row_nil) }.should raise_error(ArgumentError)
50
50
  lambda { Bisac::POLineItem.load_from_string(@invalid_row_num) }.should raise_error(ArgumentError)
51
51
  end
52
+
53
+ specify "Should render into a single line if no title or author are provided" do
54
+ item = Bisac::POLineItem.load_from_string(@valid_isbn13_row)
55
+
56
+ item.to_s.split("\n").size.should eql(1)
57
+ end
58
+
59
+ specify "Should render into two lines if a title is provided" do
60
+ item = Bisac::POLineItem.load_from_string(@valid_isbn13_row)
61
+ item.title = "test title"
62
+
63
+ item.to_s.split("\n").size.should eql(2)
64
+ end
65
+
66
+ specify "Should render into three lines if a title and author are provided" do
67
+ item = Bisac::POLineItem.load_from_string(@valid_isbn13_row)
68
+ item.title = "test title"
69
+ item.author = "test author"
70
+
71
+ item.to_s.split("\n").size.should eql(3)
72
+ end
52
73
  end
@@ -4,7 +4,7 @@ require 'bisac'
4
4
 
5
5
  context "A new bisac purchase order object" do
6
6
 
7
- setup do
7
+ before(:each) do
8
8
  @valid_file = File.dirname(__FILE__) + "/data/bisac_po.txt"
9
9
  @valid_multi_file = File.dirname(__FILE__) + "/data/bisac_multi_po.txt"
10
10
  @invalid_file_no_header = File.dirname(__FILE__) + "/data/bisac_po_no_header.txt"
@@ -4,7 +4,7 @@ require 'bisac'
4
4
 
5
5
  context "A new bisac purchase order line item object" do
6
6
 
7
- setup do
7
+ before(:each) do
8
8
  @valid_row = "40000030000000019629000000000107112260670000100000000000000000 000000000101 "
9
9
  @valid_isbn13_row = "40000030000000019629000000000107112260670000100000000000000000 000000000101 9780711226067"
10
10
  end
@@ -4,7 +4,7 @@ require 'bisac'
4
4
 
5
5
  context "The BISAC POA Class" do
6
6
 
7
- setup do
7
+ before(:each) do
8
8
  @valid_file = File.dirname(__FILE__) + "/data/valid_poa.txt"
9
9
  @invalid_file_onix = File.dirname(__FILE__) + "/data/single_product.xml"
10
10
  end
@@ -26,7 +26,7 @@ end
26
26
 
27
27
  context "A BISAC POA object" do
28
28
 
29
- setup do
29
+ before(:each) do
30
30
  @valid_file = File.dirname(__FILE__) + "/data/valid_poa.txt"
31
31
  @invalid_file_onix = File.dirname(__FILE__) + "/data/single_product.xml"
32
32
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bisac
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.9"
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Healy
@@ -9,11 +9,11 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-11-24 00:00:00 +11:00
12
+ date: 2010-02-16 00:00:00 +11:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: rbook-isbn
16
+ name: isbn10
17
17
  type: :runtime
18
18
  version_requirement:
19
19
  version_requirements: !ruby/object:Gem::Requirement
@@ -22,7 +22,17 @@ dependencies:
22
22
  - !ruby/object:Gem::Version
23
23
  version: "1.0"
24
24
  version:
25
- description: This library is designed to make working with various BISAC file formats easier.
25
+ - !ruby/object:Gem::Dependency
26
+ name: ean13
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "1.0"
34
+ version:
35
+ description: " This library is designed to make working with various BISAC\n file formats easier.\n"
26
36
  email: jimmy@deefa.com
27
37
  executables: []
28
38
 
@@ -34,33 +44,33 @@ extra_rdoc_files:
34
44
  - LICENSE
35
45
  files:
36
46
  - lib/bisac.rb
37
- - lib/bisac
38
- - lib/bisac/message.rb
47
+ - lib/bisac/utils.rb
48
+ - lib/bisac/poa_line_item.rb
39
49
  - lib/bisac/po.rb
50
+ - lib/bisac/message.rb
51
+ - lib/bisac/poa.rb
40
52
  - lib/bisac/po_line_item.rb
41
53
  - lib/bisac/product.rb
42
- - lib/bisac/poa.rb
43
- - lib/bisac/poa_line_item.rb
44
- - lib/bisac/utils.rb
45
- - specs/data
46
- - specs/data/bisac_multi_po.txt
54
+ - specs/new_po_spec.rb
55
+ - specs/new_bisac_spec.rb
56
+ - specs/poa_spec.rb
57
+ - specs/poa_line_item_spec.rb
47
58
  - specs/data/bisac_po.txt
48
- - specs/data/bisac_po_no_footer.txt
49
- - specs/data/bisac_po_no_header.txt
59
+ - specs/data/valid_poa.txt
50
60
  - specs/data/valid_bisac.txt
61
+ - specs/data/bisac_multi_po.txt
62
+ - specs/data/bisac_po_no_header.txt
51
63
  - specs/data/single_product.xml
52
- - specs/data/valid_poa.txt
53
- - specs/new_bisac_spec.rb
64
+ - specs/data/bisac_po_no_footer.txt
54
65
  - specs/new_po_line_item_spec.rb
55
- - specs/new_po_spec.rb
56
- - specs/poa_spec.rb
57
- - specs/poa_line_item_spec.rb
58
66
  - Rakefile
59
67
  - README
60
68
  - COPYING
61
69
  - LICENSE
62
70
  has_rdoc: true
63
71
  homepage: http://rbook.rubyforge.org/
72
+ licenses: []
73
+
64
74
  post_install_message:
65
75
  rdoc_options:
66
76
  - --title
@@ -85,13 +95,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
95
  requirements: []
86
96
 
87
97
  rubyforge_project: rbook
88
- rubygems_version: 1.3.1
98
+ rubygems_version: 1.3.5
89
99
  signing_key:
90
- specification_version: 2
100
+ specification_version: 3
91
101
  summary: A library for manipulating BISAC files
92
102
  test_files:
93
- - specs/new_bisac_spec.rb
94
- - specs/new_po_line_item_spec.rb
95
103
  - specs/new_po_spec.rb
104
+ - specs/new_bisac_spec.rb
96
105
  - specs/poa_spec.rb
97
106
  - specs/poa_line_item_spec.rb
107
+ - specs/new_po_line_item_spec.rb