Module: LibXML::Conversions::Node

Defined in:
lib/active_support/xml_mini/libxml.rb

Overview

:nodoc:

Constant Summary collapse

CONTENT_ROOT =
"__content__"

Instance Method Summary collapse

Instance Method Details

#to_hash(hash = {}) ⇒ Object

Convert XML document to hash.

hash

Hash to merge the converted element into.

[View source]

43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/active_support/xml_mini/libxml.rb', line 43

def to_hash(hash = {})
  node_hash = {}

  # Insert node hash into parent hash correctly.
  case hash[name]
  when Array then hash[name] << node_hash
  when Hash  then hash[name] = [hash[name], node_hash]
  when nil   then hash[name] = node_hash
  end

  # Handle child elements
  each_child do |c|
    if c.element?
      c.to_hash(node_hash)
    elsif c.text? || c.cdata?
      node_hash[CONTENT_ROOT] ||= +""
      node_hash[CONTENT_ROOT] << c.content
    end
  end

  # Remove content node if it is blank
  if node_hash.length > 1 && node_hash[CONTENT_ROOT].blank?
    node_hash.delete(CONTENT_ROOT)
  end

  # Handle attributes
  each_attr { |a| node_hash[a.name] = a.value }

  hash
end