marc4j4r 1.2.0 → 1.3.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.
- data/CHANGES +4 -0
- data/Rakefile +2 -0
- data/VERSION +1 -1
- data/jars/marc4j-extra-readers-writers.jar +0 -0
- data/lib/marc4j4r.rb +0 -3
- data/lib/marc4j4r/reader.rb +53 -27
- data/spec/alephsequentialreader_spec.rb +12 -3
- data/spec/reader_spec.rb +4 -0
- metadata +91 -86
data/CHANGES
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
1.3.0
|
2
|
+
Updated to use jlogger; added logging #nextRecord (also used by #each) to
|
3
|
+
AlephSequentialReader and PermissiveStreamReader
|
4
|
+
|
1
5
|
1.2.0
|
2
6
|
Fixed encoding problem with to_marc and from_string roundtrip
|
3
7
|
Added to_hash/to_marc_in_json and from_hash/from_marc_in_json (see
|
data/Rakefile
CHANGED
@@ -11,6 +11,8 @@ begin
|
|
11
11
|
gem.email = "bill@dueber.com"
|
12
12
|
gem.homepage = "http://github.com/billdueber/javamarc/tree/master/ruby/marc4j4r/"
|
13
13
|
gem.authors = ["BillDueber"]
|
14
|
+
|
15
|
+
gem.add_dependency "jlogger", ">= 0.0.3"
|
14
16
|
gem.add_development_dependency "bacon", ">= 0"
|
15
17
|
gem.add_development_dependency "yard", ">= 0"
|
16
18
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.3.0
|
Binary file
|
data/lib/marc4j4r.rb
CHANGED
data/lib/marc4j4r/reader.rb
CHANGED
@@ -1,34 +1,55 @@
|
|
1
1
|
import 'org.marc4j.ErrorHandler'
|
2
|
-
require '
|
3
|
-
$LOG ||= Logger.new(STDERR)
|
2
|
+
require 'jlogger'
|
4
3
|
|
5
|
-
module
|
6
|
-
|
7
|
-
|
8
|
-
# Return the next record, after calling #hashify on it
|
9
|
-
def each(hashify=true)
|
10
|
-
while self.hasNext
|
4
|
+
module MarcReader
|
5
|
+
module LoggingNextRecord
|
6
|
+
def nextRecord(hashify=true)
|
11
7
|
begin
|
12
8
|
r = self.next
|
13
9
|
# rescue Java::org.marc4j.MarcException => e
|
14
10
|
rescue org.marc4j.MarcException => e
|
15
|
-
|
16
|
-
|
17
|
-
raise e
|
18
|
-
end
|
19
|
-
self.errors.getErrors.each do |err|
|
20
|
-
case err.severity
|
21
|
-
when ErrorHandler::ERROR_TYPO, ErrorHandler::MINOR_ERROR, ErrorHandler::MAJOR_ERROR
|
22
|
-
$LOG.warn err.toString
|
23
|
-
when ErrorHandler::INFO
|
24
|
-
$LOG.info err.toString
|
25
|
-
when ErrorHandler::FATAL
|
26
|
-
$LOG.error err.toString
|
27
|
-
next # skip to the next record
|
28
|
-
end
|
29
|
-
end
|
11
|
+
puts "#{e}"
|
12
|
+
raise e
|
30
13
|
end
|
14
|
+
self.logErrors if self.methods.include? 'errors'
|
31
15
|
r.hashify if hashify
|
16
|
+
return r
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
module Java::OrgMarc4j::MarcReader
|
22
|
+
include Enumerable
|
23
|
+
include JLogger::Simple
|
24
|
+
|
25
|
+
|
26
|
+
def logErrors
|
27
|
+
return unless self.errors.getErrors
|
28
|
+
self.errors.getErrors.each do |err|
|
29
|
+
case err.severity
|
30
|
+
when ErrorHandler::MAJOR_ERROR
|
31
|
+
log.error err.toString
|
32
|
+
when ErrorHandler::ERROR_TYPO, ErrorHandler::MINOR_ERROR
|
33
|
+
self.log.warn err.toString
|
34
|
+
when ErrorHandler::INFO
|
35
|
+
log.info err.toString
|
36
|
+
when ErrorHandler::FATAL
|
37
|
+
log.error err.toString
|
38
|
+
Process.exit
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def nextRecord(hashify = true)
|
44
|
+
r = self.next
|
45
|
+
r.hashify if hashify
|
46
|
+
return r
|
47
|
+
end
|
48
|
+
|
49
|
+
# Return the next record, after calling #hashify on it
|
50
|
+
def each(hashify=true)
|
51
|
+
while self.hasNext
|
52
|
+
r = self.nextRecord(hashify)
|
32
53
|
yield r
|
33
54
|
end
|
34
55
|
end
|
@@ -79,17 +100,22 @@ module MARC4J4R
|
|
79
100
|
@handle = IOConvert.byteinstream(input)
|
80
101
|
case type
|
81
102
|
when :strictmarc then
|
82
|
-
Java::org.marc4j.MarcStreamReader.
|
103
|
+
Java::org.marc4j.MarcStreamReader.send(:include, Enumerable)
|
83
104
|
return Java::org.marc4j.MarcStreamReader.new(@handle, encoding)
|
84
105
|
when :permissivemarc then
|
85
106
|
encoding ||= 'BESTGUESS'
|
86
|
-
Java::org.marc4j.MarcPermissiveStreamReader.
|
107
|
+
Java::org.marc4j.MarcPermissiveStreamReader.send(:include, Enumerable)
|
108
|
+
Java::org.marc4j.MarcPermissiveStreamReader.send(:include, JLogger::Simple)
|
109
|
+
Java::org.marc4j.MarcPermissiveStreamReader.send(:include, MarcReader::LoggingNextRecord)
|
87
110
|
return Java::org.marc4j.MarcPermissiveStreamReader.new(@handle, true, true, encoding)
|
88
111
|
when :marcxml then
|
89
|
-
Java::org.marc4j.MarcXmlReader.
|
112
|
+
Java::org.marc4j.MarcXmlReader.send(:include, Enumerable)
|
113
|
+
Java::org.marc4j.MarcXmlReader.send(:include, JLogger::Simple)
|
90
114
|
return Java::org.marc4j.MarcXmlReader.new(@handle)
|
91
115
|
when :alephsequential then
|
92
|
-
Java::org.marc4j.MarcAlephSequentialReader.
|
116
|
+
Java::org.marc4j.MarcAlephSequentialReader.send(:include, Enumerable)
|
117
|
+
Java::org.marc4j.MarcAlephSequentialReader.send(:include, JLogger::Simple)
|
118
|
+
Java::org.marc4j.MarcAlephSequentialReader.send(:include, MarcReader::LoggingNextRecord)
|
93
119
|
return Java::org.marc4j.MarcAlephSequentialReader.new(@handle)
|
94
120
|
else
|
95
121
|
raise ArgumentError, "Reader type #{type} illegal: must be :strictmarc, :permissivemarc, :marcxml, or :alephsequential"
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'jlogger'
|
2
3
|
|
3
4
|
import 'org.marc4j.ErrorHandler'
|
4
5
|
|
@@ -20,6 +21,7 @@ end
|
|
20
21
|
|
21
22
|
describe "MarcAlephSequentialReader record construction" do
|
22
23
|
before do
|
24
|
+
JLogger::Simple.startConsole
|
23
25
|
seqfile = "#{DIR}/three.seq"
|
24
26
|
reader = MARC4J4R::Reader.new(seqfile, :alephsequential)
|
25
27
|
@recs = reader.collect
|
@@ -63,6 +65,7 @@ end
|
|
63
65
|
|
64
66
|
describe "MarcAlephSequentialReader error handling" do
|
65
67
|
|
68
|
+
|
66
69
|
it "should bail on a bad file" do
|
67
70
|
lambda{
|
68
71
|
reader = MARC4J4R::Reader.new("#{DIR}/doesntexist.seq", :alephsequential)
|
@@ -73,12 +76,12 @@ describe "MarcAlephSequentialReader error handling" do
|
|
73
76
|
it "should fail to read a non-aleph-seq file" do
|
74
77
|
lambda {
|
75
78
|
reader = MARC4J4R::Reader.new("#{DIR}/batch.xml", :alephsequential)
|
76
|
-
}.should.raise Java::
|
79
|
+
}.should.raise Java::java.io.IOException
|
77
80
|
end
|
78
81
|
|
79
82
|
it "should produce a minor error for bad indicators" do
|
80
83
|
reader = MARC4J4R::Reader.new("#{DIR}/errors.seq", :alephsequential)
|
81
|
-
r = reader.
|
84
|
+
r = reader.nextRecord
|
82
85
|
err = reader.errors.getErrors
|
83
86
|
e = err[0]
|
84
87
|
e.severity.should.equal ErrorHandler::MINOR_ERROR
|
@@ -91,13 +94,19 @@ describe "MarcAlephSequentialReader error handling" do
|
|
91
94
|
it "should produce a major error for poorly-formed variable field" do
|
92
95
|
reader = MARC4J4R::Reader.new("#{DIR}/errors.seq", :alephsequential)
|
93
96
|
r = reader.next
|
94
|
-
r = reader.
|
97
|
+
r = reader.nextRecord # second record
|
95
98
|
err = reader.errors.getErrors
|
96
99
|
e = err[0]
|
97
100
|
e.severity.should.equal ErrorHandler::MAJOR_ERROR
|
98
101
|
e.to_string.should.match /malformed/i
|
99
102
|
end
|
100
103
|
|
104
|
+
it "should log all three" do
|
105
|
+
reader = MARC4J4R::Reader.new("#{DIR}/errors.seq", :alephsequential)
|
106
|
+
1.should.equal 1
|
107
|
+
reader.each {|r|}
|
108
|
+
end
|
109
|
+
|
101
110
|
end
|
102
111
|
|
103
112
|
|
data/spec/reader_spec.rb
CHANGED
@@ -61,6 +61,8 @@ describe "Reader encodings, strict reader" do
|
|
61
61
|
end
|
62
62
|
|
63
63
|
describe "Reader encodings, permissive reader" do
|
64
|
+
|
65
|
+
|
64
66
|
it "Works with UTF-8 without explicit encoding" do
|
65
67
|
reader = MARC4J4R::Reader.new("#{DIR}/chinese_utf8.dat", :permissivemarc)
|
66
68
|
r = reader.first
|
@@ -79,6 +81,8 @@ describe "Reader encodings, permissive reader" do
|
|
79
81
|
second_title = r.find_by_tag('245')[1]
|
80
82
|
second_title['a'].should.equal "湘鄂贛苏区史稿 /" # equal, because it's permissive and tries to do the right thing
|
81
83
|
end
|
84
|
+
|
85
|
+
|
82
86
|
end
|
83
87
|
|
84
88
|
|
metadata
CHANGED
@@ -1,51 +1,60 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: marc4j4r
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 31
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
version: 1.
|
6
|
+
- 1
|
7
|
+
- 3
|
8
|
+
- 0
|
9
|
+
version: 1.3.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
|
-
- BillDueber
|
12
|
+
- BillDueber
|
14
13
|
autorequire:
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2010-10-
|
17
|
+
date: 2010-10-15 00:00:00 -04:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: jlogger
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
- 0
|
30
|
+
- 3
|
31
|
+
version: 0.0.3
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: bacon
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
43
|
+
version: "0"
|
44
|
+
type: :development
|
45
|
+
version_requirements: *id002
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: yard
|
48
|
+
prerelease: false
|
49
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
segments:
|
54
|
+
- 0
|
55
|
+
version: "0"
|
56
|
+
type: :development
|
57
|
+
version_requirements: *id003
|
49
58
|
description: Syntactic sugar and some extra methods to deal with MARC data using the java .jar marc4j
|
50
59
|
email: bill@dueber.com
|
51
60
|
executables: []
|
@@ -53,72 +62,68 @@ executables: []
|
|
53
62
|
extensions: []
|
54
63
|
|
55
64
|
extra_rdoc_files:
|
56
|
-
- README.rdoc
|
65
|
+
- README.rdoc
|
57
66
|
files:
|
58
|
-
- CHANGES
|
59
|
-
- LICENSE
|
60
|
-
- README.rdoc
|
61
|
-
- Rakefile
|
62
|
-
- VERSION
|
63
|
-
- benchj.rb
|
64
|
-
- jars/jackson-all-1.6.0.jar
|
65
|
-
- jars/javamarc.jar
|
66
|
-
- jars/marc4j-extra-readers-writers.jar
|
67
|
-
- lib/marc4j4r.rb
|
68
|
-
- lib/marc4j4r/controlfield.rb
|
69
|
-
- lib/marc4j4r/datafield.rb
|
70
|
-
- lib/marc4j4r/reader.rb
|
71
|
-
- lib/marc4j4r/record.rb
|
72
|
-
- lib/marc4j4r/writer.rb
|
73
|
-
- spec/alephsequentialreader_spec.rb
|
74
|
-
- spec/bad.dat
|
75
|
-
- spec/badbatch.dat
|
76
|
-
- spec/badbatch.xml
|
77
|
-
- spec/batch.dat
|
78
|
-
- spec/batch.txt
|
79
|
-
- spec/batch.xml
|
80
|
-
- spec/chinese_utf8.dat
|
81
|
-
- spec/controlfield_spec.rb
|
82
|
-
- spec/datafield_spec.rb
|
83
|
-
- spec/errors.seq
|
84
|
-
- spec/one.dat
|
85
|
-
- spec/one.txt
|
86
|
-
- spec/one.xml
|
87
|
-
- spec/reader_spec.rb
|
88
|
-
- spec/record_spec.rb
|
89
|
-
- spec/spec_helper.rb
|
90
|
-
- spec/three.seq
|
67
|
+
- CHANGES
|
68
|
+
- LICENSE
|
69
|
+
- README.rdoc
|
70
|
+
- Rakefile
|
71
|
+
- VERSION
|
72
|
+
- benchj.rb
|
73
|
+
- jars/jackson-all-1.6.0.jar
|
74
|
+
- jars/javamarc.jar
|
75
|
+
- jars/marc4j-extra-readers-writers.jar
|
76
|
+
- lib/marc4j4r.rb
|
77
|
+
- lib/marc4j4r/controlfield.rb
|
78
|
+
- lib/marc4j4r/datafield.rb
|
79
|
+
- lib/marc4j4r/reader.rb
|
80
|
+
- lib/marc4j4r/record.rb
|
81
|
+
- lib/marc4j4r/writer.rb
|
82
|
+
- spec/alephsequentialreader_spec.rb
|
83
|
+
- spec/bad.dat
|
84
|
+
- spec/badbatch.dat
|
85
|
+
- spec/badbatch.xml
|
86
|
+
- spec/batch.dat
|
87
|
+
- spec/batch.txt
|
88
|
+
- spec/batch.xml
|
89
|
+
- spec/chinese_utf8.dat
|
90
|
+
- spec/controlfield_spec.rb
|
91
|
+
- spec/datafield_spec.rb
|
92
|
+
- spec/errors.seq
|
93
|
+
- spec/one.dat
|
94
|
+
- spec/one.txt
|
95
|
+
- spec/one.xml
|
96
|
+
- spec/reader_spec.rb
|
97
|
+
- spec/record_spec.rb
|
98
|
+
- spec/spec_helper.rb
|
99
|
+
- spec/three.seq
|
91
100
|
has_rdoc: true
|
92
101
|
homepage: http://github.com/billdueber/javamarc/tree/master/ruby/marc4j4r/
|
93
102
|
licenses: []
|
94
103
|
|
95
104
|
post_install_message:
|
96
105
|
rdoc_options:
|
97
|
-
- --charset=UTF-8
|
106
|
+
- --charset=UTF-8
|
98
107
|
require_paths:
|
99
|
-
- lib
|
108
|
+
- lib
|
100
109
|
required_ruby_version: !ruby/object:Gem::Requirement
|
101
|
-
none: false
|
102
110
|
requirements:
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
version: "0"
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
segments:
|
114
|
+
- 0
|
115
|
+
version: "0"
|
109
116
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
|
-
none: false
|
111
117
|
requirements:
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
version: "0"
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
segments:
|
121
|
+
- 0
|
122
|
+
version: "0"
|
118
123
|
requirements: []
|
119
124
|
|
120
125
|
rubyforge_project:
|
121
|
-
rubygems_version: 1.3.
|
126
|
+
rubygems_version: 1.3.6
|
122
127
|
signing_key:
|
123
128
|
specification_version: 3
|
124
129
|
summary: Use marc4j java library in JRuby in a more ruby-ish way
|