Class: MARC::FieldMap
- Inherits:
-
Array
- Object
- Array
- MARC::FieldMap
- Defined in:
- lib/marc/record.rb
Overview
The FieldMap is an Array of DataFields and Controlfields. It also contains a Hash representation of the fields for faster lookups (under certain conditions)
Instance Attribute Summary collapse
-
#clean ⇒ Object
Returns the value of attribute clean.
-
#tags ⇒ Object
readonly
Returns the value of attribute tags.
Instance Method Summary collapse
-
#each_by_tag(tags) ⇒ Object
Returns an array of fields, in the order they appear, according to their tag.
-
#freeze ⇒ Object
Freeze for immutability, first reindexing if needed.
-
#initialize ⇒ FieldMap
constructor
A new instance of FieldMap.
-
#reindex ⇒ Object
Rebuild the HashWithChecksumAttribute with the current values of the fields Array.
-
#tag_list ⇒ Object
Returns an array of all of the tags that appear in the record (not in the order they appear, however).
Constructor Details
#initialize ⇒ FieldMap
Returns a new instance of FieldMap.
9 10 11 12 |
# File 'lib/marc/record.rb', line 9 def initialize = {} @clean = true end |
Instance Attribute Details
#clean ⇒ Object
Returns the value of attribute clean.
7 8 9 |
# File 'lib/marc/record.rb', line 7 def clean @clean end |
#tags ⇒ Object (readonly)
Returns the value of attribute tags.
6 7 8 |
# File 'lib/marc/record.rb', line 6 def end |
Instance Method Details
#each_by_tag(tags) ⇒ Object
Returns an array of fields, in the order they appear, according to their tag. The tags argument can be a string (e.g. ‘245’), an array ([‘100’,‘700’,‘800’]) or a range ((‘600’..‘699’)).
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/marc/record.rb', line 35 def each_by_tag() reindex unless @clean indices = [] # Get all the indices associated with the tags Array().each do |t| indices.concat [t] if [t] end # Remove any nils indices.compact! return [] if indices.empty? # Sort it, so we get the fields back in the order they appear in the record indices.sort! indices.each do |tag| yield self[tag] end end |
#freeze ⇒ Object
Freeze for immutability, first reindexing if needed. A frozen FieldMap is safe for concurrent access, and also can more easily avoid accidental reindexing on even read-only use.
58 59 60 61 |
# File 'lib/marc/record.rb', line 58 def freeze reindex unless @clean super end |
#reindex ⇒ Object
Rebuild the HashWithChecksumAttribute with the current values of the fields Array
16 17 18 19 20 21 22 23 |
# File 'lib/marc/record.rb', line 16 def reindex = {} each_with_index do |field, i| [field.tag] ||= [] [field.tag] << i end @clean = true end |
#tag_list ⇒ Object
Returns an array of all of the tags that appear in the record (not in the order they appear, however).
26 27 28 29 |
# File 'lib/marc/record.rb', line 26 def tag_list reindex unless @clean .keys end |