enhanced_marc 0.1.7 → 0.2.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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.7
1
+ 0.2.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{enhanced_marc}
8
- s.version = "0.1.7"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ross Singer"]
12
- s.date = %q{2010-09-23}
12
+ s.date = %q{2010-09-24}
13
13
  s.description = %q{A set of enhancements to ruby-marc to make parsing MARC data easier}
14
14
  s.email = %q{rossfsinger@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -1,23 +1,23 @@
1
1
  require 'marc'
2
2
  require 'locale/info'
3
- require 'enhanced_marc/reader'
4
- require 'enhanced_marc/record'
5
- require 'enhanced_marc/xmlreader'
6
- require 'enhanced_marc/leader'
7
- require 'enhanced_marc/book_record'
8
- require 'enhanced_marc/serial_record'
9
- require 'enhanced_marc/visual_record'
10
- require 'enhanced_marc/mixed_record'
11
- require 'enhanced_marc/map_record'
12
- require 'enhanced_marc/score_record'
13
- require 'enhanced_marc/sound_record'
14
- require 'enhanced_marc/computer_record'
15
- require 'enhanced_marc/record_type'
16
- require 'enhanced_marc/book_type'
17
- require 'enhanced_marc/computer_type'
18
- require 'enhanced_marc/map_type'
19
- require 'enhanced_marc/mixed_type'
20
- require 'enhanced_marc/score_type'
21
- require 'enhanced_marc/serial_type'
22
- require 'enhanced_marc/sound_type'
23
- require 'enhanced_marc/visual_type'
3
+ require File.dirname(__FILE__) + '/enhanced_marc/reader'
4
+ require File.dirname(__FILE__) + '/enhanced_marc/record'
5
+ require File.dirname(__FILE__) + '/enhanced_marc/xmlreader'
6
+ require File.dirname(__FILE__) + '/enhanced_marc/leader'
7
+ require File.dirname(__FILE__) + '/enhanced_marc/book_record'
8
+ require File.dirname(__FILE__) + '/enhanced_marc/serial_record'
9
+ require File.dirname(__FILE__) + '/enhanced_marc/visual_record'
10
+ require File.dirname(__FILE__) + '/enhanced_marc/mixed_record'
11
+ require File.dirname(__FILE__) + '/enhanced_marc/map_record'
12
+ require File.dirname(__FILE__) + '/enhanced_marc/score_record'
13
+ require File.dirname(__FILE__) + '/enhanced_marc/sound_record'
14
+ require File.dirname(__FILE__) + '/enhanced_marc/computer_record'
15
+ require File.dirname(__FILE__) + '/enhanced_marc/record_type'
16
+ require File.dirname(__FILE__) + '/enhanced_marc/book_type'
17
+ require File.dirname(__FILE__) + '/enhanced_marc/computer_type'
18
+ require File.dirname(__FILE__) + '/enhanced_marc/map_type'
19
+ require File.dirname(__FILE__) + '/enhanced_marc/mixed_type'
20
+ require File.dirname(__FILE__) + '/enhanced_marc/score_type'
21
+ require File.dirname(__FILE__) + '/enhanced_marc/serial_type'
22
+ require File.dirname(__FILE__) + '/enhanced_marc/sound_type'
23
+ require File.dirname(__FILE__) + '/enhanced_marc/visual_type'
@@ -97,7 +97,7 @@ module MARC
97
97
  record.append(field)
98
98
  end
99
99
  end
100
-
100
+ record.fields.reindex
101
101
  return record
102
102
  end
103
103
 
@@ -6,14 +6,15 @@ module MARC
6
6
  # Creates a new MARC::Record using MARC::Leader
7
7
  # to work with the leader, rather than a string
8
8
  def initialize
9
- super
9
+ @fields = FieldMap.new
10
+ # leader is 24 bytes
10
11
  @leader = Leader.new(' ' * 24)
11
12
  end
12
13
 
13
14
  def contains_type?(record_type)
14
15
  type_map = {"BKS"=>/[at]{1}/, "COM"=>"m", "MAP"=>/[ef]{1}/,"MIX"=>"p", "SCO"=>/[cd]{1}/, "REC"=>/[ij]{1}/, "SER"=>"s", "VIS"=>/[gkor]{1}/}
15
16
  matching_fields = []
16
- @fields.find_all {|f| ('006') === f.tag}.each { | fxd_fld |
17
+ @fields.each_by_tag('006').each { | fxd_fld |
17
18
  matching_fields << fxd_fld if fxd_fld.value[0,1].match(type_map[record_type])
18
19
 
19
20
  }
@@ -23,16 +24,18 @@ module MARC
23
24
 
24
25
  def self.new_from_record(record)
25
26
  leader = Leader.new(record.leader)
26
- case leader.get_type
27
- when 'BKS' then return MARC::BookRecord.new_from_record(record)
28
- when 'SER' then return MARC::SerialRecord.new_from_record(record)
29
- when 'VIS' then return MARC::VisualRecord.new_from_record(record)
30
- when 'MIX' then return MARC::MixedRecord.new_from_record(record)
31
- when 'MAP' then return MARC::MapRecord.new_from_record(record)
32
- when 'SCO' then return MARC::ScoreRecord.new_from_record(record)
33
- when 'REC' then return MARC::SoundRecord.new_from_record(record)
34
- when 'COM' then return MARC::ComputerRecord.new_from_record(record)
27
+ typed_record = case leader.get_type
28
+ when 'BKS' then MARC::BookRecord.new_from_record(record)
29
+ when 'SER' then MARC::SerialRecord.new_from_record(record)
30
+ when 'VIS' then MARC::VisualRecord.new_from_record(record)
31
+ when 'MIX' then MARC::MixedRecord.new_from_record(record)
32
+ when 'MAP' then MARC::MapRecord.new_from_record(record)
33
+ when 'SCO' then MARC::ScoreRecord.new_from_record(record)
34
+ when 'REC' then MARC::SoundRecord.new_from_record(record)
35
+ when 'COM' then MARC::ComputerRecord.new_from_record(record)
35
36
  end
37
+ typed_record.fields.reindex
38
+ typed_record
36
39
  end
37
40
 
38
41
  def to_typed_record
@@ -69,7 +72,7 @@ module MARC
69
72
  type_map = {/[at]{1}/=>BookType,'m'=>ComputerType,/[ef]{1}/=>MapType,
70
73
  'p'=>MixedType,/[cd]{1}/=>ScoreType,/[ij]{1}/=>SoundType,'s'=>SerialType,
71
74
  /[gkor]{1}/=>VisualType}
72
- @fields.find_all {|f| ('006') === f.tag}.each { | fxd_fld |
75
+ @fields.each_by_tag('006').each { | fxd_fld |
73
76
  type_map.each_key { | key |
74
77
  if fxd_fld.value[0,1].match(key)
75
78
  self.extend type_map[key]
@@ -83,8 +86,7 @@ module MARC
83
86
  unless self['008'].value[35,3].empty?
84
87
  languages << Locale::Info.get_language(self['008'].value[35,3])
85
88
  end
86
- oh_four_ones = @fields.find_all {|fld| fld.tag == "041"}
87
- oh_four_ones.each do | oh_four_one |
89
+ @fields.each_by_tag("041").each do | oh_four_one |
88
90
  langs = oh_four_one.find_all { |sub| sub.code == 'a'}
89
91
  langs.each do | lang |
90
92
  languages << Locale::Info.get_language(lang.value)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enhanced_marc
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 7
10
- version: 0.1.7
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ross Singer
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-09-23 00:00:00 -04:00
18
+ date: 2010-09-24 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency