lib/xmlhasher/node.rb in xmlhasher-0.0.3 vs lib/xmlhasher/node.rb in xmlhasher-0.0.4
- old
+ new
@@ -16,14 +16,10 @@
h[name] = attributes.inject({}) { |r, (key, value)| r[key] = value if !value.nil? && !value.to_s.empty?; r }
if children.size == 1
child = children.first
h[name].merge!(child.to_hash)
else
- if children.map(&:name).uniq.size == 1
- h[name].merge!(children.inject({}) { |r, child| (r[child.name] ||= []) << child.to_hash[child.name]; r })
- else
- h[name].merge!(children.inject({}) { |r, child| r.merge!(child.to_hash); r })
- end
+ h[name].merge!(children.group_by { |child| child.name }.inject({}) { |r, (k, v)| v.length == 1 ? r.merge!(v.first.to_hash) : r[k] = v.map { |c| c.to_hash[c.name] }; r })
end
end
h[name] = nil if h[name].empty?
h
end