class MARC::FieldMap
The FieldMap
is an Array of DataFields and Controlfields. It also contains a Hash representation of the fields for faster lookups (under certain conditions)
Attributes
clean[RW]
Public Class Methods
new()
click to toggle source
# File lib/marc/record.rb, line 9 def initialize @tags = {} @clean = true end
Public Instance Methods
each_by_tag(tags) { |self| ... }
click to toggle source
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’)).
# File lib/marc/record.rb, line 35 def each_by_tag(tags) reindex unless @clean indices = [] # Get all the indices associated with the tags Array(tags).each do |t| indices.concat @tags[t] if @tags[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()
click to toggle source
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.
Calls superclass method
# File lib/marc/record.rb, line 58 def freeze reindex unless @clean super end
reindex()
click to toggle source
Rebuild the HashWithChecksumAttribute with the current values of the fields Array
# File lib/marc/record.rb, line 16 def reindex @tags = {} each_with_index do |field, i| @tags[field.tag] ||= [] @tags[field.tag] << i end @clean = true end
tag_list()
click to toggle source
Returns an array of all of the tags that appear in the record (not in the order they appear, however).
# File lib/marc/record.rb, line 26 def tag_list reindex unless @clean @tags.keys end