Class: Metacrunch::Mab2::Document

Inherits:
Object
  • Object
show all
Defined in:
lib/metacrunch/mab2/document.rb,
lib/metacrunch/mab2/document/subfield.rb,
lib/metacrunch/mab2/document/datafield.rb,
lib/metacrunch/mab2/document/controlfield.rb,
lib/metacrunch/mab2/document/subfield_set.rb,
lib/metacrunch/mab2/document/datafield_set.rb,
lib/metacrunch/mab2/document/mab_xml_parser.rb,
lib/metacrunch/mab2/document/jruby/mab_xml_parser.rb

Defined Under Namespace

Classes: Controlfield, Datafield, DatafieldSet, MabXmlParser, Subfield, SubfieldSet

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDocument

Returns a new instance of Document.



35
36
37
38
# File 'lib/metacrunch/mab2/document.rb', line 35

def initialize
  @controlfields = {}
  @datafields = {}
end

Class Method Details

.from_aleph_mab_xml(xml) ⇒ Object

TODO: Remove form 2.0



29
30
31
32
33
# File 'lib/metacrunch/mab2/document.rb', line 29

def self.from_aleph_mab_xml(xml)
  d = ActiveSupport::Deprecation.new("2.0", "metacrunch-mab2")
  d.deprecation_warning("#from_aleph_mab_xml", "use #from_mab_xml instead")
  self.from_mab_xml(xml)
end

.from_mab_xml(xml) ⇒ Metacrunch::Mab2::Document

Parameters:

  • xml (String)

    repesenting a MAB document in Aleph MAB XML format

Returns:



24
25
26
# File 'lib/metacrunch/mab2/document.rb', line 24

def self.from_mab_xml(xml)
  MabXmlParser.new.parse(xml)
end

Instance Method Details

#add_controlfield(controlfield) ⇒ Object

Adds a new control field.

Parameters:



59
60
61
# File 'lib/metacrunch/mab2/document.rb', line 59

def add_controlfield(controlfield)
  @controlfields[controlfield.tag] = controlfield
end

#add_datafield(datafield) ⇒ Object

Adds a new data field.

Parameters:



97
98
99
# File 'lib/metacrunch/mab2/document.rb', line 97

def add_datafield(datafield)
  (@datafields[datafield.tag] ||= []) << datafield
end

#controlfield(tag) ⇒ Controlfield

Returns the control field matching the given tag.

Parameters:

  • tag (String)

    of the control field

Returns:



50
51
52
# File 'lib/metacrunch/mab2/document.rb', line 50

def controlfield(tag)
  @controlfields[tag] || Controlfield.new(tag)
end

#datafields(tag = nil, ind1: nil, ind2: nil) ⇒ Metacrunch::Mab2::Document::DatafieldSet

Returns the data fields matching the given tag and ind1/ind2.

Parameters:

  • tag (String, nil) (defaults to: nil)

    of the data field. Can be nil to match any data field.

  • ind1 (String, nil) (defaults to: nil)

    filter for ind1. Can be nil to match any indicator 1.

  • ind2 (String, nil) (defaults to: nil)

    filter for ind2. Can be nil to match any indicator 2.

Returns:



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/metacrunch/mab2/document.rb', line 76

def datafields(tag = nil, ind1: nil, ind2: nil)
  if tag.nil?
    DatafieldSet.new(@datafields.values.flatten(1))
  else
    set = DatafieldSet.new(@datafields[tag] || [])
    return set if set.empty? || (ind1.nil? && ind2.nil?)

    ind1 = map_indicator(ind1)
    ind2 = map_indicator(ind2)

    set.select do |_datafield|
      check_indicator(ind1, _datafield.ind1) && check_indicator(ind2, _datafield.ind2)
    end
  end
end

#to_xmlObject


Serialization




105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/metacrunch/mab2/document.rb', line 105

def to_xml
  builder = ::Builder::XmlMarkup.new(indent: 2)
  builder.instruct!(:xml, :encoding => "UTF-8")
  builder.mab_xml do
    controlfields_struct.values.each do |_controlfield|
      _controlfield.to_xml(builder)
    end

    @datafields.values.each do |_datafield_set|
      _datafield_set.to_xml(builder)
    end
  end
end