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 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