marc 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/marc/marc21.rb +2 -0
- data/lib/marc/reader.rb +7 -2
- data/test/tc_reader.rb +5 -5
- metadata +1 -1
data/lib/marc/marc21.rb
CHANGED
@@ -76,6 +76,8 @@ module MARC
|
|
76
76
|
# get the byte offsets from the record directory
|
77
77
|
directory = marc[LEADER_LENGTH..base_address-1]
|
78
78
|
|
79
|
+
throw "invalid directory in record" if directory == nil
|
80
|
+
|
79
81
|
# the number of fields in the record corresponds to
|
80
82
|
# how many directory entries there are
|
81
83
|
num_fields = directory.length / DIRECTORY_ENTRY_LENGTH
|
data/lib/marc/reader.rb
CHANGED
@@ -76,8 +76,13 @@ module MARC
|
|
76
76
|
|
77
77
|
def each
|
78
78
|
@handle.each_line(MARC::MARC21::END_OF_RECORD) do |raw|
|
79
|
-
|
80
|
-
|
79
|
+
begin
|
80
|
+
record = MARC::Record.new_from_marc(raw, :forgiving => true)
|
81
|
+
yield record
|
82
|
+
rescue StandardError => e
|
83
|
+
# caught exception just keep barrelling along
|
84
|
+
# TODO add logging
|
85
|
+
end
|
81
86
|
end
|
82
87
|
end
|
83
88
|
|
data/test/tc_reader.rb
CHANGED
@@ -14,25 +14,25 @@ class ReaderTest < Test::Unit::TestCase
|
|
14
14
|
reader = MARC::ForgivingReader.new('test/batch.dat')
|
15
15
|
count = 0
|
16
16
|
reader.each { count += 1 }
|
17
|
-
assert_equal(
|
17
|
+
assert_equal(10, count)
|
18
18
|
end
|
19
19
|
|
20
20
|
def test_search
|
21
21
|
reader = MARC::Reader.new('test/batch.dat')
|
22
22
|
records = reader.find_all { |r| r =~ /Perl/ }
|
23
|
-
assert_equal(records.length
|
23
|
+
assert_equal(10, records.length)
|
24
24
|
|
25
25
|
reader = MARC::Reader.new('test/batch.dat')
|
26
26
|
records = reader.find_all { |r| r['245'] =~ /Perl/ }
|
27
|
-
assert_equal(records.length
|
27
|
+
assert_equal(10, records.length)
|
28
28
|
|
29
29
|
reader = MARC::Reader.new('test/batch.dat')
|
30
30
|
records = reader.find_all { |r| r['245']['a'] =~ /Perl/ }
|
31
|
-
assert_equal(records.length
|
31
|
+
assert_equal(10, records.length)
|
32
32
|
|
33
33
|
reader = MARC::Reader.new('test/batch.dat')
|
34
34
|
records = reader.find_all { |r| r =~ /Foo/ }
|
35
|
-
assert_equal(records.length
|
35
|
+
assert_equal(0, records.length)
|
36
36
|
end
|
37
37
|
|
38
38
|
end
|
metadata
CHANGED