The FieldMap is an Array of DataFields and Controlfields. It also contains a Hash representation of the fields for faster lookups (under certain conditions)
# File lib/marc/record.rb, line 9 def initialize @tags = {} @clean = true end
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 34 def each_by_tag(tags) reindex unless @clean indices = @tags.values_at(*(@tags.keys & [*tags])).flatten.sort return [] if indices.empty? self.values_at(*indices).each do |tag| yield tag end end
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.
# File lib/marc/record.rb, line 46 def freeze self.reindex unless @clean super end
Rebuild the HashWithChecksumAttribute with the current values of the fields Array
# File lib/marc/record.rb, line 16 def reindex @tags = {} self.each_with_index do |field, i| @tags[field.tag] ||= [] @tags[field.tag] << i end @clean = true end
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