module Mabmapper module MabXml class Field attr_reader :name, :subfields def initialize(name) @name = name @subfields = [] end def add_subfield(subfield) raise if subfield.blank? or not subfield.is_a?(Subfield) @subfields << subfield end def values(options = {}) options.reverse_merge!(join_subfields: nil) values = @subfields.map(&:value) join = options[:join_subfields] join ? values.join((!!join==join) ? nil : join.to_s) : values end def value(options = {}) options.reverse_merge!(join_subfields: ' ') values(options) end def has_subfield?(subfield) subfields.any?{|s| s.name.to_s == subfield.to_s} end def get_subfield(subfield) subfields.select{|s| s.name.to_s == subfield.to_s}.try(:first) end def to_s value end end end end