-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add missing integrating resource blvl to serial; more linting (#5)
* Add missing integrating resource blvl to serial; more linting * Add TODO for test * Clean up rakefile - more sensible versioning
- Loading branch information
Showing
10 changed files
with
113 additions
and
91 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
0.3.0 | ||
0.3.2 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |