class Metacrunch::Mab2::Document::Controlfield

Attributes

tag[RW]

Public Class Methods

new(tag = nil, values = []) click to toggle source
# File lib/metacrunch/mab2/document/controlfield.rb, line 8
def initialize(tag = nil, values = [])
  self.tag    = tag
  self.values = values
end

Public Instance Methods

at(index) click to toggle source

@param [int] index @return [Array<String>] value at given index

# File lib/metacrunch/mab2/document/controlfield.rb, line 54
def at(index)
  @values.at(index)
end
tag=(value) click to toggle source
# File lib/metacrunch/mab2/document/controlfield.rb, line 13
def tag=(value)
  @tag = value.to_s if value
end
to_xml(builder) click to toggle source

Serialization


# File lib/metacrunch/mab2/document/controlfield.rb, line 62
def to_xml(builder)
  builder.controlfield(values2string, tag: tag)
end
values() click to toggle source

@return [Array<String>]

# File lib/metacrunch/mab2/document/controlfield.rb, line 46
def values
  @values
end
values=(values) click to toggle source

Setter for the control field values. Values can be given as String or as an Array.

@param [String, Array] values for the control field as a String or Array.

In case of String the MAB2 delimiter/placeholder | is respected. In case
of an Array every element is converted into a String. Empty strings are
converted into nil. Array values that are longer than one character will
raise an ArgumentError.

@example Add control field using String values

add_control_field("050", "a|b||")

@example Add control field using Array

add_control_field("050", ["a", nil, "b", nil, nil])
# File lib/metacrunch/mab2/document/controlfield.rb, line 33
def values=(values)
  @values = case values
    when String then string2values(values)
    when Array  then array2values(values)
    when nil    then []
    else
      raise ArgumentError, "expecting a String or Array, but got #{values}"
    end
end

Private Instance Methods

array2values(array) click to toggle source
# File lib/metacrunch/mab2/document/controlfield.rb, line 72
def array2values(array)
  array.map do |v|
    if v.present?
      v = v.to_s
      raise ArgumentError, "invalid value of controlfield #{tag}: #{array}" if v.length > 1
      v
    else
      nil
    end
  end
end
string2values(string) click to toggle source
# File lib/metacrunch/mab2/document/controlfield.rb, line 68
def string2values(string)
  string.chars.to_a.map{ |e| (e=="|") ? nil : e }
end
values2string() click to toggle source
# File lib/metacrunch/mab2/document/controlfield.rb, line 84
def values2string
  values.map{|c| c.blank? ? "|" : c}.join
end