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 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.2.0
1
+ 1.3.0
@@ -2,9 +2,6 @@ unless defined? JRUBY_VERSION
2
2
  raise "Only works under JRUBY"
3
3
  end
4
4
 
5
- require 'logger'
6
- $LOG ||= Logger.new(STDERR)
7
-
8
5
  jardir = File.join(File.dirname(__FILE__), '..', 'jars')
9
6
 
10
7
  # For each jar, check for a representative class in each
@@ -1,34 +1,55 @@
1
1
  import 'org.marc4j.ErrorHandler'
2
- require 'logger'
3
- $LOG ||= Logger.new(STDERR)
2
+ require 'jlogger'
4
3
 
5
- module Java::OrgMarc4j::MarcReader
6
- include Enumerable
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
- unless self.methods.include? 'errors'
16
- puts "#{e}"
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.module_eval("include Enumerable")
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.module_eval("include Enumerable")
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.module_eval("include Enumerable")
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.module_eval("include Enumerable")
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::org.marc4j.MarcException
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.next
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.next # second record
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
 
@@ -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
- - 1
8
- - 2
9
- - 0
10
- version: 1.2.0
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-05 00:00:00 -04:00
17
+ date: 2010-10-15 00:00:00 -04:00
19
18
  default_executable:
20
19
  dependencies:
21
- - !ruby/object:Gem::Dependency
22
- name: bacon
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 0
32
- version: "0"
33
- type: :development
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: yard
37
- prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 3
44
- segments:
45
- - 0
46
- version: "0"
47
- type: :development
48
- version_requirements: *id002
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
- - !ruby/object:Gem::Version
105
- hash: 3
106
- segments:
107
- - 0
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
- - !ruby/object:Gem::Version
114
- hash: 3
115
- segments:
116
- - 0
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.7
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