Skip to content

Commit

Permalink
Add missing integrating resource blvl to serial; more linting (#5)
Browse files Browse the repository at this point in the history
* Add missing integrating resource blvl to serial; more linting

* Add TODO for test

* Clean up rakefile - more sensible versioning
  • Loading branch information
rsinger authored May 22, 2017
1 parent 6f172e6 commit 25b5451
Show file tree
Hide file tree
Showing 10 changed files with 113 additions and 91 deletions.
31 changes: 0 additions & 31 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -1,41 +1,10 @@
RUBY_ENHANCED_MARC_VERSION = '0.3.0'

require 'rubygems'
require 'rake'
require 'rake/testtask'
require 'rake/rdoctask'
require 'rake/packagetask'
require 'rake/gempackagetask'

task :default => [:test]

Rake::TestTask.new('test') do |t|
t.libs << 'lib'
t.pattern = 'test/tc_*.rb'
t.verbose = true
t.ruby_opts = ['-r marc', '-r test/unit']
end

Rake::RDocTask.new('doc') do |rd|
rd.rdoc_files.include("enhanced_marc/**/*.rb")
rd.main = 'MARC::Record'
rd.rdoc_dir = 'doc'
end

begin
require 'jeweler'
Jeweler::Tasks.new do |s|

s.add_dependency('marc')
s.add_dependency('locale')
s.name = 'enhanced_marc'
s.author = 'Ross Singer'
s.email = '[email protected]'
s.homepage = 'http://github.com/rsinger/enhanced-marc/tree'
s.summary = 'A DSL for MARC data'
s.description = 'A set of enhancements to ruby-marc to make parsing MARC data easier'
end
rescue LoadError
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
end

2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.3.0
0.3.2
6 changes: 5 additions & 1 deletion enhanced_marc.gemspec
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
# coding: utf-8
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'enhanced_marc/version'
Gem::Specification.new do |s|
s.name = %q{enhanced_marc}
s.version = "0.3.1"
s.version = MARC::EnhancedMARC::VERSION

s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.authors = ["Ross Singer"]
Expand Down
1 change: 1 addition & 0 deletions lib/enhanced_marc.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,4 @@
require File.dirname(__FILE__) + '/enhanced_marc/serial_type'
require File.dirname(__FILE__) + '/enhanced_marc/sound_type'
require File.dirname(__FILE__) + '/enhanced_marc/visual_type'
require File.dirname(__FILE__) + '/enhanced_marc/version'
2 changes: 1 addition & 1 deletion lib/enhanced_marc/leader.rb
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ def type_translator(type_code, blvl_code)

rec_types = {
'BKS' => { type: /[at]{1}/, blvl: /[acdm]{1}/ },
'SER' => { type: /[a]{1}/, blvl: /[bs]{1}/ },
'SER' => { type: /[a]{1}/, blvl: /[bis]{1}/ },
'VIS' => { type: /[gkro]{1}/, blvl: /[abcdims]{1}/ },
'MIX' => { type: /[p]{1}/, blvl: /[cd]{1}/ },
'MAP' => { type: /[ef]{1}/, blvl: /[abcdims]{1}/ },
Expand Down
44 changes: 25 additions & 19 deletions lib/enhanced_marc/serial_record.rb
Original file line number Diff line number Diff line change
@@ -1,37 +1,43 @@
module MARC

# TODO: rename to ContinuingResource
# A class that represents an individual MARC record. Every record
# is made up of a collection of MARC::Field objects.

# is made up of a collection of MARC::Field objects.
class SerialRecord < Record

def initialize
super
@leader[6] = 'a' if @leader[6,1] == ' '
@leader[7] = 's' if @leader[7,1] == ' '
@record_type = 'SER'
@leader[7] = 's' if @leader[7,1] == ' '
@record_type = 'SER'
@bibliographic_level = @leader.get_blvl
self.extend SerialType
self.inspect_fixed_fields
extend SerialType
inspect_fixed_fields
end
def is_valid_type?
return false unless @leader[6,1].match('a')
return true

def valid_type?
return false unless @leader[6, 1] == 'a'
true
end
def is_valid_blvl?
return false unless @leader[7,1].match(/[bis]{1}/)
return true
alias is_valid_type? valid_type?
def valid_blvl?
return false unless @leader[7, 1] =~ /[bis]{1}/
true
end
alias is_valid_blvl? valid_blvl?

def self.new_from_record(record)
rec = SerialRecord.new
record.instance_variables.each { | var |
rec.instance_variable_set(var, record.instance_variable_get(var))
}
return Exception.new("Incorrect type declaration in leader") unless rec.is_valid_type?
return Exception.new("Incorrect bibliographic declaration in leader") unless rec.is_valid_blvl?
return rec
end

error = rec.valid_type? ? nil : 'Incorrect type declaration in leader'
if !error && !rec.valid_blvl?
error = 'Incorrect bibliographic declaration in leader'
end
return Exception.new(error) if error
rec
end

end
end
end
43 changes: 24 additions & 19 deletions lib/enhanced_marc/sound_record.rb
Original file line number Diff line number Diff line change
@@ -1,37 +1,42 @@
module MARC

# A class that represents an individual MARC record. Every record
# is made up of a collection of MARC::Field objects.
# is made up of a collection of MARC::Field objects.

class SoundRecord < Record

def initialize
super
@leader[6] = 'i' if @leader[6,1] == ' '
@leader[7] = 'm' if @leader[7,1] == ' '
@record_type = 'REC'
@leader[6] = 'i' if @leader[6, 1] == ' '
@leader[7] = 'm' if @leader[7, 1] == ' '
@record_type = 'REC'
@bibliographic_level = @leader.get_blvl
self.extend SoundType
self.inspect_fixed_fields
extend SoundType
inspect_fixed_fields
end
def is_valid_type?
return false unless @leader[6,1].match(/[ij]{1}/)
return true

def valid_type?
return false unless @leader[6, 1] =~ /[ij]{1}/
true
end
def is_valid_blvl?
return false unless @leader[7,1].match(/[abcdims]{1}/)
return true
alias is_valid_type? valid_type?

def valid_blvl?
return false unless @leader[7, 1] =~ /[abcdims]{1}/
true
end
alias is_valid_blvl? valid_blvl?
def self.new_from_record(record)
rec = SoundRecord.new
record.instance_variables.each { | var |
rec.instance_variable_set(var, record.instance_variable_get(var))
}
return Exception.new("Incorrect type declaration in leader") unless rec.is_valid_type?
return Exception.new("Incorrect bibliographic declaration in leader") unless rec.is_valid_blvl?
return rec
end

error = rec.valid_type? ? nil : 'Incorrect type declaration in leader'
if !error && !rec.valid_blvl?
error = 'Incorrect bibliographic declaration in leader'
end
return Exception.new(error) if error
rec
end
end
end
end
5 changes: 5 additions & 0 deletions lib/enhanced_marc/version.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module MARC
module EnhancedMARC
VERSION = '0.3.2'.freeze
end
end
44 changes: 25 additions & 19 deletions lib/enhanced_marc/visual_record.rb
Original file line number Diff line number Diff line change
@@ -1,37 +1,43 @@
module MARC

# A class that represents an individual MARC record. Every record
# is made up of a collection of MARC::Field objects.

# is made up of a collection of MARC::Field objects.
class VisualRecord < Record

def initialize
super
@leader[6] = 'g' if @leader[6,1] == ' '
@leader[7] = 'm' if @leader[7,1] == ' '
@record_type = 'VIS'
@leader[7] = 'm' if @leader[7,1] == ' '
@record_type = 'VIS'
@bibliographic_level = @leader.get_blvl
self.extend VisualType
self.inspect_fixed_fields
extend VisualType
inspect_fixed_fields
end
def is_valid_type?
return false unless @leader[6,1].match(/[gkro]{1}/)
return true

def valid_type?
return false unless @leader[6, 1] =~ /[gkro]{1}/
true
end
def is_valid_blvl?
return false unless @leader[7,1].match(/[abcdims]{1}/)
return true
alias is_valid_type? valid_type?

def valid_blvl?
return false unless @leader[7, 1] =~ /[abcdims]{1}/
true
end
alias is_valid_blvl? valid_blvl?

def self.new_from_record(record)
rec = VisualRecord.new
record.instance_variables.each { | var |
rec.instance_variable_set(var, record.instance_variable_get(var))
}
return Exception.new("Incorrect type declaration in leader") unless rec.is_valid_type?
return Exception.new("Incorrect bibliographic declaration in leader") unless rec.is_valid_blvl?
return rec
end

error = rec.valid_type? ? nil : 'Incorrect type declaration in leader'
if !error && !rec.valid_blvl?
error = 'Incorrect bibliographic declaration in leader'
end
return Exception.new(error) if error
rec
end

end
end
end
26 changes: 26 additions & 0 deletions spec/continuing_resources_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
require 'enhanced_marc'

RSpec.describe MARC::SerialRecord do
context 'resource identification from MARC records' do
it "should recognize type 'a' and blvl 'i' as an integrating resource" do
reader = load_marc('text_web_resource.mrc')
rec = reader.first
expect(rec).to be_instance_of(MARC::SerialRecord)
expect(rec).to be_kind_of(MARC::Record)
expect(rec.record_type).to eq('SER')
expect(rec.bibliographic_level).to eq('Integrating resource')
end
it "should recognize type 'a' and blvl 's' as a serial" do
reader = load_marc('ejournal.mrc')
rec = reader.first
expect(rec).to be_instance_of(MARC::SerialRecord)
expect(rec).to be_kind_of(MARC::Record)
expect(rec.record_type).to eq('SER')
expect(rec.bibliographic_level).to eq('Serial')
end
# TODO: add serial component part if example can be found
end
def load_marc(file_name)
MARC::Reader.new(File.dirname(__FILE__) + '/fixtures/' + file_name)
end
end

0 comments on commit 25b5451

Please sign in to comment.