1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-21 14:50:08 +03:00

Refactor to_hash method

This commit is contained in:
Daniel Molina 2011-01-19 10:43:44 +01:00
parent 0291b75d94
commit 97bd83d36b

View File

@ -216,52 +216,42 @@ module OpenNebula
return str
end
def to_hash
merge_element!({}, @xml.document.root)
end
private
def merge_element!(hash, element)
merge!(hash, element.name, prepare_element(element))
end
def prepare_element(element)
def to_hash(hash={}, element=nil)
element ||= @xml.document.root
if NOKOGIRI
if element.children.length == 1
element.children.first.text
r = element.children.first.text
else
hash = {}
element.children.each do |c|
r = {}
element.children.each { |c|
if c.element?
merge_element!(hash, c)
to_hash(r, c)
elsif c.text?
next
end
end
hash
}
end
else
if element.has_elements?
hash = {}
element.each_element {|child| merge_element!(hash, child) }
hash
r = {}
element.each_element { |c| to_hash(r, c) }
elsif element.has_text?
element.text
r = element.text
end
end
end
def merge!(hash, key, value)
key = element.name
if hash.has_key?(key)
if hash[key].instance_of?(Array)
hash[key] << value
hash[key] << r
else
hash[key] = [hash[key], value]
hash[key] = [hash[key], r]
end
else
hash[key] = value
hash[key] = r
end
hash
end
end