marc4j4r 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|