Module: ActiveSupport::XmlMini_Nokogiri::Conversions::Node

Defined in:
activesupport/lib/active_support/xml_mini/nokogiri.rb

Overview

:nodoc:

Constant Summary collapse

CONTENT_ROOT =
'__content__'.freeze

Instance Method Summary collapse

Instance Method Details

#to_hash(hash = {}) ⇒ Object

Convert XML document to hash.

hash

Hash to merge the converted element into.



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
73
74
75
76
# File 'activesupport/lib/active_support/xml_mini/nokogiri.rb', line 47

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
  children.each 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 and there are child tags
  if node_hash.length > 1 && node_hash[CONTENT_ROOT].blank?
    node_hash.delete(CONTENT_ROOT)
  end

  # Handle attributes
  attribute_nodes.each { |a| node_hash[a.node_name] = a.value }

  hash
end