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/aleph_mab_xml_parser.rb

Defined Under Namespace

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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDocument

Returns a new instance of Document.



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

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

Class Method Details

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

Parameters:

  • xml (String)

    repesenting a MAB document in Aleph MAB XML format

Returns:



19
20
21
# File 'lib/metacrunch/mab2/document.rb', line 19

def self.from_aleph_mab_xml(xml)
  AlephMabXmlParser.parse(xml)
end

Instance Method Details

#add_controlfield(controlfield) ⇒ Object

Adds a new control field.

Parameters:



47
48
49
# File 'lib/metacrunch/mab2/document.rb', line 47

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

#add_datafield(datafield) ⇒ Object

Adds a new data field.

Parameters:



85
86
87
# File 'lib/metacrunch/mab2/document.rb', line 85

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:



38
39
40
# File 'lib/metacrunch/mab2/document.rb', line 38

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:



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/metacrunch/mab2/document.rb', line 64

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




93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/metacrunch/mab2/document.rb', line 93

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