marc 1.1.1 → 1.2.0

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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +30 -0
  3. data/.github/workflows/ruby.yml +24 -0
  4. data/.gitignore +17 -0
  5. data/.standard.yml +1 -0
  6. data/{Changes → CHANGELOG.md} +102 -30
  7. data/Gemfile +15 -0
  8. data/README.md +239 -46
  9. data/Rakefile +14 -14
  10. data/bin/marc +14 -0
  11. data/bin/marc2xml +17 -0
  12. data/examples/xml2marc.rb +10 -0
  13. data/lib/marc/constants.rb +3 -3
  14. data/lib/marc/controlfield.rb +35 -23
  15. data/lib/marc/datafield.rb +70 -63
  16. data/lib/marc/dublincore.rb +59 -41
  17. data/lib/marc/exception.rb +9 -1
  18. data/lib/marc/jsonl_reader.rb +33 -0
  19. data/lib/marc/jsonl_writer.rb +44 -0
  20. data/lib/marc/marc8/map_to_unicode.rb +16417 -16420
  21. data/lib/marc/marc8/to_unicode.rb +80 -86
  22. data/lib/marc/reader.rb +117 -123
  23. data/lib/marc/record.rb +72 -62
  24. data/lib/marc/subfield.rb +12 -10
  25. data/lib/marc/unsafe_xmlwriter.rb +93 -0
  26. data/lib/marc/version.rb +1 -1
  27. data/lib/marc/writer.rb +27 -30
  28. data/lib/marc/xml_parsers.rb +222 -197
  29. data/lib/marc/xmlreader.rb +131 -114
  30. data/lib/marc/xmlwriter.rb +93 -82
  31. data/lib/marc.rb +20 -18
  32. data/marc.gemspec +23 -0
  33. data/test/marc8/tc_marc8_mapping.rb +3 -3
  34. data/test/marc8/tc_to_unicode.rb +28 -32
  35. data/test/messed_up_leader.xml +9 -0
  36. data/test/tc_controlfield.rb +37 -34
  37. data/test/tc_datafield.rb +65 -60
  38. data/test/tc_dublincore.rb +9 -11
  39. data/test/tc_hash.rb +10 -13
  40. data/test/tc_jsonl.rb +19 -0
  41. data/test/tc_marchash.rb +17 -21
  42. data/test/tc_parsers.rb +108 -144
  43. data/test/tc_reader.rb +35 -36
  44. data/test/tc_reader_char_encodings.rb +149 -169
  45. data/test/tc_record.rb +143 -148
  46. data/test/tc_subfield.rb +14 -13
  47. data/test/tc_unsafe_xml.rb +95 -0
  48. data/test/tc_writer.rb +101 -108
  49. data/test/tc_xml.rb +101 -94
  50. data/test/tc_xml_error_handling.rb +7 -8
  51. data/test/ts_marc.rb +8 -8
  52. metadata +80 -9
@@ -1,15 +1,12 @@
1
- # encoding: UTF-8
1
+ require "test/unit"
2
+ require "marc"
2
3
 
3
- require 'test/unit'
4
- require 'marc'
4
+ require "marc/marc8/to_unicode"
5
5
 
6
- require 'marc/marc8/to_unicode'
7
-
8
- require 'unf'
6
+ require "unf"
9
7
 
10
8
  if "".respond_to?(:encoding)
11
9
 
12
-
13
10
  class TestMarc8ToUnicode < Test::Unit::TestCase
14
11
  def test_empty_string
15
12
  value = MARC::Marc8::ToUnicode.new.transcode("")
@@ -35,18 +32,18 @@ if "".respond_to?(:encoding)
35
32
  # two data files, marc8 and utf8, with line-by-line correspondences.
36
33
  #
37
34
  # For now, we have NOT included proprietary III encodings in our test data!
38
- utf8_file = File.open( File.expand_path("../data/test_utf8.txt", __FILE__), "r:UTF-8")
39
- marc8_file = File.open( File.expand_path("../data/test_marc8.txt", __FILE__), "r:binary")
35
+ utf8_file = File.open(File.expand_path("../data/test_utf8.txt", __FILE__), "r:UTF-8")
36
+ marc8_file = File.open(File.expand_path("../data/test_marc8.txt", __FILE__), "r:binary")
40
37
 
41
38
  i = 0
42
39
  converter = MARC::Marc8::ToUnicode.new
43
40
 
44
41
  begin
45
- while true do
42
+ loop do
46
43
  i += 1
47
44
 
48
- utf8 = utf8_file.readline.chomp
49
- marc8 = marc8_file.readline.chomp
45
+ utf8 = utf8_file.readline.chomp
46
+ marc8 = marc8_file.readline.chomp
50
47
 
51
48
  converted = converter.transcode(marc8)
52
49
 
@@ -55,11 +52,11 @@ if "".respond_to?(:encoding)
55
52
 
56
53
  assert_equal utf8, converted, "Test data line #{i}, expected converted to match provided utf8"
57
54
  end
58
- rescue EOFError => each
55
+ rescue EOFError
59
56
  # just means the file was over, no biggie
60
57
  assert i > 1500, "Read as many lines as we expected to, at least 1500"
61
- rescue Exception => e
62
- $stderr.puts "Error at test data line #{i}"
58
+ rescue => e
59
+ warn "Error at test data line #{i}"
63
60
  raise e
64
61
  end
65
62
  end
@@ -67,23 +64,23 @@ if "".respond_to?(:encoding)
67
64
  def test_explicit_normalization
68
65
  # \xC1 is Marc8 "script small letter l", which under unicode
69
66
  # COMPAT normalization will turn into ordinary 'l'
70
- marc8 = "Conversa\xF0c\xE4ao \xC1"
71
- unicode = "Conversação \u2113"
67
+ marc8 = "Conversa\xF0c\xE4ao \xC1"
68
+ unicode = "Conversação \u2113"
72
69
 
73
- unicode_c = UNF::Normalizer.normalize(unicode, :nfc)
74
- unicode_kc = UNF::Normalizer.normalize(unicode, :nfkc)
75
- unicode_d = UNF::Normalizer.normalize(unicode, :nfd)
76
- unicode_kd = UNF::Normalizer.normalize(unicode, :nfkd)
70
+ unicode_c = UNF::Normalizer.normalize(unicode, :nfc)
71
+ unicode_kc = UNF::Normalizer.normalize(unicode, :nfkc)
72
+ unicode_d = UNF::Normalizer.normalize(unicode, :nfd)
73
+ unicode_kd = UNF::Normalizer.normalize(unicode, :nfkd)
77
74
 
78
75
  converter = MARC::Marc8::ToUnicode.new
79
76
 
80
- assert_equal unicode_c, converter.transcode(marc8, :normalization => :nfc)
81
- assert_equal unicode_kc, converter.transcode(marc8, :normalization => :nfkc)
82
- assert_equal unicode_d, converter.transcode(marc8, :normalization => :nfd)
83
- assert_equal unicode_kd, converter.transcode(marc8, :normalization => :nfkd)
77
+ assert_equal unicode_c, converter.transcode(marc8, normalization: :nfc)
78
+ assert_equal unicode_kc, converter.transcode(marc8, normalization: :nfkc)
79
+ assert_equal unicode_d, converter.transcode(marc8, normalization: :nfd)
80
+ assert_equal unicode_kd, converter.transcode(marc8, normalization: :nfkd)
84
81
 
85
82
  # disable normalization for performance or something, we won't end up with NFC.
86
- refute_equal unicode_c, converter.transcode(marc8, :normalization => nil)
83
+ refute_equal unicode_c, converter.transcode(marc8, normalization: nil)
87
84
  end
88
85
 
89
86
  def test_expand_ncr
@@ -91,7 +88,7 @@ if "".respond_to?(:encoding)
91
88
 
92
89
  marc8_ncr = "Weird &#x200F; &#xFFFD; but these aren't changed #x2000; &#200F etc."
93
90
  assert_equal "Weird \u200F \uFFFD but these aren't changed #x2000; &#200F etc.", converter.transcode(marc8_ncr)
94
- assert_equal marc8_ncr, converter.transcode(marc8_ncr, :expand_ncr => false), "should not expand NCR if disabled"
91
+ assert_equal marc8_ncr, converter.transcode(marc8_ncr, expand_ncr: false), "should not expand NCR if disabled"
95
92
  end
96
93
 
97
94
  def test_bad_byte
@@ -130,7 +127,7 @@ if "".respond_to?(:encoding)
130
127
  converter = MARC::Marc8::ToUnicode.new
131
128
 
132
129
  bad_marc8 = "\e$1!PVK7oi$N!Q1!G4i$N!0p!Q+{6924f6}\e(B"
133
- value = converter.transcode(bad_marc8, :invalid => :replace)
130
+ value = converter.transcode(bad_marc8, invalid: :replace)
134
131
 
135
132
  assert_equal "UTF-8", value.encoding.name
136
133
  assert value.valid_encoding?
@@ -145,7 +142,7 @@ if "".respond_to?(:encoding)
145
142
  converter = MARC::Marc8::ToUnicode.new
146
143
 
147
144
  bad_marc8 = "\e$1!PVK7oi$N!Q1!G4i$N!0p!Q+{6924f6}\e(B"
148
- value = converter.transcode(bad_marc8, :invalid => :replace, :replace => "")
145
+ value = converter.transcode(bad_marc8, invalid: :replace, replace: "")
149
146
 
150
147
  assert_equal "UTF-8", value.encoding.name
151
148
  assert value.valid_encoding?
@@ -169,9 +166,8 @@ if "".respond_to?(:encoding)
169
166
 
170
167
  assert_equal "La Soci\u00E9t\x1B,", value
171
168
  end
172
-
173
169
  end
174
170
  else
175
- require 'pathname'
176
- $stderr.puts "\nTests not being run in ruby 1.9.x, skipping #{Pathname.new(__FILE__).basename}\n\n"
171
+ require "pathname"
172
+ warn "\nTests not being run in ruby 1.9.x, skipping #{Pathname.new(__FILE__).basename}\n\n"
177
173
  end
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <collection xmlns="http://www.loc.gov/MARC21/slim">
3
+ <record>
4
+ <leader>01301nam a22003618&lt; 4500</leader>
5
+ <controlfield tag="005">02-26-96</controlfield>
6
+ <controlfield tag="008">960213s1996 flu 000 0 eng </controlfield>
7
+ <controlfield tag="001">991010422259705706</controlfield>
8
+ <datafield tag="010" ind1=" " ind2=" "><subfield code="a">95041713</subfield></datafield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">1566700701</subfield><subfield code="q">(alk. paper)</subfield></datafield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">9781566700702</subfield><subfield code="q">(alk. paper)</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(NhD)b23774344-01dcl_inst</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(CStRLIN)ocm33245123</subfield><subfield code="9">ExL</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="b">b23774344</subfield></datafield><datafield tag="040" ind1=" " ind2=" "><subfield code="a">DLC</subfield><subfield code="c">DLC</subfield><subfield code="d">NhD</subfield></datafield><datafield tag="050" ind1=" " ind2="4"><subfield code="a">QH545.A1</subfield><subfield code="b">R65 1996</subfield></datafield><datafield tag="100" ind1="1" ind2=" "><subfield code="a">Römbke, Jörg.</subfield><subfield code="0">http://id.loc.gov/authorities/names/n95093926.</subfield></datafield><datafield tag="245" ind1="1" ind2="0"><subfield code="a">Applied ecotoxicology /</subfield><subfield code="c">Jörg Römbke, Johann F. Moltmann.</subfield></datafield><datafield tag="260" ind1=" " ind2=" "><subfield code="a">Boca Raton, FL :</subfield><subfield code="b">CRC/Lewis Publishers,</subfield><subfield code="c">1995.</subfield></datafield><datafield tag="300" ind1=" " ind2=" "><subfield code="a">282 pages :</subfield><subfield code="b">illustrations ;</subfield><subfield code="c">24 cm.</subfield></datafield><datafield tag="336" ind1=" " ind2=" "><subfield code="a">text</subfield><subfield code="b">txt</subfield><subfield code="2">rdacontent.</subfield></datafield><datafield tag="337" ind1=" " ind2=" "><subfield code="a">unmediated</subfield><subfield code="b">n</subfield><subfield code="2">rdamedia.</subfield></datafield><datafield tag="338" ind1=" " ind2=" "><subfield code="a">volume</subfield><subfield code="b">nc</subfield><subfield code="2">rdacarrier.</subfield></datafield><datafield tag="504" ind1=" " ind2=" "><subfield code="a">Includes bibliographical references and index.</subfield></datafield><datafield tag="650" ind1=" " ind2="0"><subfield code="a">Pollution.</subfield><subfield code="0">http://id.loc.gov/authorities/subjects/sh85104530.</subfield></datafield><datafield tag="700" ind1="1" ind2=" "><subfield code="a">Moltmann, Johann Felix,</subfield><subfield code="d">1954-</subfield><subfield code="0">http://id.loc.gov/authorities/names/n91002202.</subfield></datafield><datafield tag="991" ind1=" " ind2=" "><subfield code="a">b23774344</subfield></datafield><datafield tag="906" ind1=" " ind2=" "><subfield code="a">0</subfield><subfield code="b">flu</subfield><subfield code="c">multi</subfield><subfield code="d">a</subfield><subfield code="e">r</subfield><subfield code="f">1</subfield><subfield code="g">02-09-96</subfield><subfield code="h">01-10-19</subfield><subfield code="i">20</subfield></datafield><datafield tag="955" ind1=" " ind2=" "><subfield code="u">+l</subfield></datafield><datafield tag="948" ind1=" " ind2=" "><subfield code="a">BSLW 06/11/2018</subfield></datafield><datafield tag="998" ind1=" " ind2=" "><subfield code="a">02/13/96</subfield><subfield code="t">c</subfield><subfield code="s">9110</subfield><subfield code="l">NHDG</subfield><subfield code="n">NhD</subfield><subfield code="w">DCLC9541713B</subfield><subfield code="d">02/13/96</subfield><subfield code="c">JS</subfield><subfield code="b">ACQ</subfield><subfield code="i">960213</subfield></datafield><datafield tag="995" ind1=" " ind2=" "><subfield code="a">OCLC Recl. 2008</subfield></datafield><datafield tag="903" ind1=" " ind2=" "><subfield code="f">corr./JS/2-26-96</subfield></datafield><datafield tag="903" ind1=" " ind2=" "><subfield code="a">QH545.A1</subfield><subfield code="b">R65 1995</subfield></datafield><datafield tag="852" ind1="0" ind2=" "><subfield code="b">DEPOSITORY</subfield><subfield code="c">DEPOSITORY</subfield><subfield code="h">QH545.A1 R65 1996</subfield><subfield code="8">22127176380005706</subfield></datafield><datafield tag="950" ind1=" " ind2=" "><subfield code="z">33311011074376</subfield><subfield code="e">1</subfield></datafield></record>
9
+ </collection>
@@ -1,50 +1,53 @@
1
- require 'test/unit'
2
- require 'marc'
1
+ require "test/unit"
2
+ require "marc"
3
3
 
4
4
  class TestField < Test::Unit::TestCase
5
-
6
5
  def test_control
7
- control = MARC::ControlField.new('005', 'foobarbaz')
8
- assert_equal(control.to_s, '005 foobarbaz')
6
+ control = MARC::ControlField.new("005", "foobarbaz")
7
+ assert_equal(control.to_s, "005 foobarbaz")
9
8
  end
10
9
 
11
10
  def test_field_as_control
12
- assert_raise(MARC::Exception) do
13
- # can't have a field with a tag < 010
14
- field = MARC::DataField.new('007')
15
- end
11
+ field = MARC::DataField.new("007")
12
+ assert_equal(field.valid?, false)
16
13
  end
17
14
 
18
15
  def test_alpha_control_field
19
- assert_raise(MARC::Exception) do
20
- # can't have a field with a tag < 010
21
- field = MARC::ControlField.new('DDD')
22
- end
16
+ # can't have a field with a tag < 010
17
+ field = MARC::ControlField.new("DDD")
18
+ assert_equal(field.valid?, false)
23
19
  end
24
-
20
+
25
21
  def test_extra_control_field
26
- MARC::ControlField.control_tags << 'FMT'
27
- assert_nothing_raised do
28
- field = MARC::ControlField.new('FMT')
29
- end
30
- assert_raise(MARC::Exception) do
31
- field = MARC::DataField.new('FMT')
32
- end
33
- MARC::ControlField.control_tags.delete('FMT')
34
- assert_nothing_raised do
35
- field = MARC::DataField.new('FMT')
36
- end
37
- assert_raise(MARC::Exception) do
38
- field = MARC::ControlField.new('FMT')
39
- end
40
-
22
+ MARC::ControlField.control_tags << "FMT"
23
+ field = MARC::ControlField.new("FMT")
24
+ assert_equal(field.valid?, true)
25
+ field = MARC::DataField.new("FMT")
26
+ assert_equal(field.valid?, false)
27
+ MARC::ControlField.control_tags.delete("FMT")
28
+ field = MARC::DataField.new("FMT")
29
+ assert_equal(field.valid?, true)
30
+ field = MARC::ControlField.new("FMT")
31
+ assert_equal(field.valid?, false)
41
32
  end
42
33
 
43
34
  def test_control_as_field
44
- assert_raise(MARC::Exception) do
45
- # can't have a control with a tag > 009
46
- f = MARC::ControlField.new('245')
47
- end
35
+ # can't have a control with a tag > 009
36
+ f = MARC::ControlField.new("245")
37
+ assert_equal(f.valid?, false)
48
38
  end
49
- end
50
39
 
40
+ def test_equal
41
+ f1 = MARC::ControlField.new("001", "foobarbaz")
42
+ f2 = MARC::ControlField.new("001", "foobarbaz")
43
+ assert_equal(f1, f2)
44
+
45
+ f3 = MARC::ControlField.new("001", "foobarbazqux")
46
+ assert_not_equal(f1, f3)
47
+ f4 = MARC::ControlField.new("002", "foobarbaz")
48
+ assert_not_equal(f1, f4)
49
+
50
+ assert_not_equal(f1, "001")
51
+ assert_not_equal(f2, "foobarbaz")
52
+ end
53
+ end
data/test/tc_datafield.rb CHANGED
@@ -1,71 +1,76 @@
1
- require 'test/unit'
2
- require 'marc'
1
+ require "test/unit"
2
+ require "marc"
3
3
 
4
4
  class TestField < Test::Unit::TestCase
5
+ def test_tag
6
+ f1 = MARC::DataField.new("100")
7
+ assert_equal("100", f1.tag)
8
+ f2 = MARC::DataField.new("100")
9
+ assert_equal("100", f2.tag)
10
+ assert_equal(f1, f2)
11
+ f3 = MARC::DataField.new("245")
12
+ assert_not_equal(f1, f3)
13
+ end
5
14
 
6
- def test_tag
7
- f1 = MARC::DataField.new('100')
8
- assert_equal('100', f1.tag)
9
- f2 = MARC::DataField.new(tag='100')
10
- assert_equal('100', f2.tag)
11
- assert_equal(f1, f2)
12
- f3 = MARC::DataField.new('245')
13
- assert_not_equal(f1, f3)
14
- end
15
+ def test_alphabetic_tag
16
+ alph = MARC::DataField.new("ALF")
17
+ assert_equal "ALF", alph.tag
15
18
 
16
- def test_alphabetic_tag
17
- alph = MARC::DataField.new('ALF')
18
- assert_equal 'ALF', alph.tag
19
+ alphnum = MARC::DataField.new("0D9")
20
+ assert_equal "0D9", alphnum.tag
21
+ end
19
22
 
20
- alphnum = MARC::DataField.new('0D9')
21
- assert_equal '0D9', alphnum.tag
22
- end
23
+ def test_indicators
24
+ f1 = MARC::DataField.new("100", "0", "1")
25
+ assert_equal("0", f1.indicator1)
26
+ assert_equal("1", f1.indicator2)
27
+ f2 = MARC::DataField.new("100", "0", "1")
28
+ assert_equal("0", f2.indicator1)
29
+ assert_equal("1", f2.indicator2)
30
+ assert_equal(f1, f2)
31
+ f3 = MARC::DataField.new("100", "1", "1")
32
+ assert_not_equal(f1, f3)
33
+ end
23
34
 
24
- def test_indicators
25
- f1 = MARC::DataField.new('100', '0', '1')
26
- assert_equal('0', f1.indicator1)
27
- assert_equal('1', f1.indicator2)
28
- f2 = MARC::DataField.new(tag='100',i1='0',i2='1')
29
- assert_equal('0', f2.indicator1)
30
- assert_equal('1', f2.indicator2)
31
- assert_equal(f1, f2)
32
- f3 = MARC::DataField.new(tag='100', i1='1', i2='1')
33
- assert_not_equal(f1, f3)
34
- end
35
+ def test_subfields
36
+ f1 = MARC::DataField.new("100", "0", "1",
37
+ MARC::Subfield.new("a", "Foo"),
38
+ MARC::Subfield.new("b", "Bar"))
39
+ assert_equal("100 01 $a Foo $b Bar ", f1.to_s)
40
+ assert_equal("FooBar", f1.value)
41
+ f2 = MARC::DataField.new("100", "0", "1",
42
+ MARC::Subfield.new("a", "Foo"),
43
+ MARC::Subfield.new("b", "Bar"))
44
+ assert_equal(f1, f2)
45
+ f3 = MARC::DataField.new("100", "0", "1",
46
+ MARC::Subfield.new("a", "Foo"),
47
+ MARC::Subfield.new("b", "Bez"))
48
+ assert_not_equal(f1, f3)
49
+ end
35
50
 
36
- def test_subfields
37
- f1 = MARC::DataField.new('100', '0', '1',
38
- MARC::Subfield.new('a', 'Foo'),
39
- MARC::Subfield.new('b', 'Bar') )
40
- assert_equal("100 01 $a Foo $b Bar ", f1.to_s)
41
- assert_equal("FooBar", f1.value)
42
- f2 = MARC::DataField.new('100', '0', '1',
43
- MARC::Subfield.new('a', 'Foo'),
44
- MARC::Subfield.new('b', 'Bar') )
45
- assert_equal(f1,f2)
46
- f3 = MARC::DataField.new('100', '0', '1',
47
- MARC::Subfield.new('a', 'Foo'),
48
- MARC::Subfield.new('b', 'Bez') )
49
- assert_not_equal(f1,f3)
50
- end
51
+ def test_subfield_shorthand
52
+ f = MARC::DataField.new("100", "0", "1", ["a", "Foo"], ["b", "Bar"])
53
+ assert_equal("100 01 $a Foo $b Bar ", f.to_s)
54
+ end
51
55
 
52
- def test_subfield_shorthand
53
- f = MARC::DataField.new('100', '0', '1', ['a', 'Foo'], ['b', 'Bar'])
54
- assert_equal('100 01 $a Foo $b Bar ', f.to_s)
55
- end
56
-
56
+ def test_iterator
57
+ field = MARC::DataField.new("100", "0", "1", ["a", "Foo"], ["b", "Bar"],
58
+ ["a", "Bez"])
59
+ count = 0
60
+ field.each { |x| count += 1 }
61
+ assert_equal(count, 3)
62
+ end
57
63
 
58
- def test_iterator
59
- field = MARC::DataField.new('100', '0', '1', ['a', 'Foo'],['b', 'Bar'],
60
- ['a', 'Bez'])
61
- count = 0
62
- field.each {|x| count += 1}
63
- assert_equal(count,3)
64
- end
65
-
66
- def test_lookup_shorthand
67
- f = MARC::DataField.new('100', '0', '1', ['a', 'Foo'], ['b', 'Bar'])
68
- assert_equal(f['b'], 'Bar')
69
- end
64
+ def test_lookup_shorthand
65
+ f = MARC::DataField.new("100", "0", "1", ["a", "Foo"], ["b", "Bar"])
66
+ assert_equal(f["b"], "Bar")
67
+ end
70
68
 
69
+ def test_equal_other_types
70
+ f = MARC::DataField.new("100", "0", "1",
71
+ MARC::Subfield.new("a", "Foo"),
72
+ MARC::Subfield.new("b", "Bar"))
73
+ assert_not_equal(f, "100 01 $a Foo $b Bar ")
74
+ assert_not_equal(f, f["a"])
75
+ end
71
76
  end
@@ -1,14 +1,12 @@
1
- require 'test/unit'
2
- require 'marc'
1
+ require "test/unit"
2
+ require "marc"
3
3
 
4
4
  class DublinCoreTest < Test::Unit::TestCase
5
-
6
- def test_mapping
7
- reader = MARC::Reader.new('test/batch.dat')
8
- reader.each do |record|
9
- dc = record.to_dublin_core
10
- assert dc['title'] == record['245']['a']
11
- end
5
+ def test_mapping
6
+ reader = MARC::Reader.new("test/batch.dat")
7
+ reader.each do |record|
8
+ dc = record.to_dublin_core
9
+ assert dc["title"] == record["245"]["a"]
12
10
  end
13
-
14
- end
11
+ end
12
+ end
data/test/tc_hash.rb CHANGED
@@ -1,26 +1,23 @@
1
- require 'test/unit'
2
- require 'marc'
3
- require 'rubygems'
1
+ require "test/unit"
2
+ require "marc"
3
+ require "rubygems"
4
4
 
5
5
  class TestHash < Test::Unit::TestCase
6
-
7
6
  def test_to_hash
8
- raw = IO.read('test/one.dat')
7
+ raw = IO.read("test/one.dat")
9
8
  r = MARC::Record.new_from_marc(raw)
10
9
  h = r.to_hash
11
10
  assert_kind_of(Hash, h)
12
- assert_equal(r.leader, h['leader'])
13
- assert_equal(r.fields.length, h['fields'].length)
14
- assert_equal(r.fields.first.tag, h['fields'].first.keys.first)
11
+ assert_equal(r.leader, h["leader"])
12
+ assert_equal(r.fields.length, h["fields"].length)
13
+ assert_equal(r.fields.first.tag, h["fields"].first.keys.first)
15
14
  end
16
15
 
17
16
  def test_roundtrip
18
- reader = MARC::Reader.new('test/batch.dat')
17
+ reader = MARC::Reader.new("test/batch.dat")
19
18
  reader.each do |r|
20
19
  x = MARC::Record.new_from_hash(r.to_hash)
21
- assert_equal(r,x)
20
+ assert_equal(r, x)
22
21
  end
23
22
  end
24
-
25
-
26
- end
23
+ end
data/test/tc_jsonl.rb ADDED
@@ -0,0 +1,19 @@
1
+ require "test/unit"
2
+ require "marc"
3
+
4
+ class JSONLTestCase < Test::Unit::TestCase
5
+ def test_round_trip
6
+ tempfile = "test/batch.jsonl"
7
+ records = MARC::Reader.new("test/batch.dat").to_a
8
+ jsonl_writer = MARC::JSONLWriter.new(tempfile)
9
+ records.each { |r| jsonl_writer.write(r) }
10
+ jsonl_writer.close
11
+
12
+ jsonl_reader = MARC::JSONLReader.new(tempfile)
13
+ jsonl_reader.each_with_index do |r, i|
14
+ assert_equal(records[i], r)
15
+ end
16
+ ensure
17
+ File.unlink(tempfile)
18
+ end
19
+ end
data/test/tc_marchash.rb CHANGED
@@ -1,37 +1,33 @@
1
- require 'test/unit'
2
- require 'marc'
3
- require 'rubygems'
1
+ require "test/unit"
2
+ require "marc"
3
+ require "rubygems"
4
4
 
5
5
  class TestMARCHASH < Test::Unit::TestCase
6
-
7
6
  def test_simple
8
7
  simple = {
9
- 'type' => 'marc-hash',
10
- 'version' => [1,0],
11
- 'leader' => 'LEADER',
12
- 'fields' => [
13
- ['245', '1', '0',
8
+ "type" => "marc-hash",
9
+ "version" => [1, 0],
10
+ "leader" => "LEADER",
11
+ "fields" => [
12
+ ["245", "1", "0",
14
13
  [
15
- ['a', 'TITLE'],
16
- ['b', 'SUBTITLE']
17
- ]
18
- ]
14
+ ["a", "TITLE"],
15
+ ["b", "SUBTITLE"]
16
+ ]]
19
17
  ]
20
18
  }
21
- r = MARC::Record.new()
22
- r.leader = 'LEADER'
23
- f = MARC::DataField.new('245', '1', '0', ['a', 'TITLE'], ['b', 'SUBTITLE'])
19
+ r = MARC::Record.new
20
+ r.leader = "LEADER"
21
+ f = MARC::DataField.new("245", "1", "0", ["a", "TITLE"], ["b", "SUBTITLE"])
24
22
  r << f
25
23
  assert_equal(r.to_marchash, simple)
26
24
  end
27
25
 
28
26
  def test_real
29
- reader = MARC::Reader.new('test/batch.dat')
27
+ reader = MARC::Reader.new("test/batch.dat")
30
28
  reader.each do |r|
31
29
  x = MARC::Record.new_from_marchash(r.to_marchash)
32
- assert_equal(r,x)
30
+ assert_equal(r, x)
33
31
  end
34
32
  end
35
-
36
-
37
- end
33
+ end