Module: Petail::XML

Defined in:
lib/petail/xml/serializer.rb,
lib/petail/xml/deserializer.rb

Constant Summary collapse

Serializer =

Converts name and value into an XML element.

lambda do |name, value, node|
  if value.is_a? Array
    element = node.add_element name.to_s
    value.map { |item| element.add_element("i").add_text item.to_s }
  else
    node.add_element(name.to_s).add_text value.to_s
  end
end
Deserializer =

Converts an XML element into a Hash.

lambda do |node, attributes = {}|
  if node.has_elements?
    node.each_element do |element|
      if element.name == "i"
        attributes[node.name.to_sym] ||= []
        attributes[node.name.to_sym].push element.text
      elsif element.elements.empty?
        attributes[element.name.to_sym] = element.text
      else
        attributes = {element.name.to_sym => Deserializer.call(element, attributes)}
      end
    end
  else
    attributes[node.name.to_sym] = node.text
  end

  attributes
end