diff --git a/lib/worldpay_cnp/xml/nokogiri.rb b/lib/worldpay_cnp/xml/nokogiri.rb index ee36f36..354ff7c 100644 --- a/lib/worldpay_cnp/xml/nokogiri.rb +++ b/lib/worldpay_cnp/xml/nokogiri.rb @@ -26,16 +26,16 @@ class Serializer include XML::Serializer def call(hash) - ::Nokogiri::XML::Document.new.tap { |d| add_xml_elements!(d, hash) }.to_s + ::Nokogiri::XML::Document.new.tap { |d| add_xml_elements!(d, nil, hash) }.to_s end private - def attributes_or_elements!(parent, key, value) + def attributes_or_elements!(document, parent, key, value) return parent[attribute_name(key)] = text_with(value) if attribute?(key) - element = ::Nokogiri::XML::Element.new(key.to_s, parent) + element = ::Nokogiri::XML::Element.new(key.to_s, document) parent.add_child(element) - add_xml_elements!(element, value) + add_xml_elements!(document, element, value) end def insert_text!(element, text) diff --git a/lib/worldpay_cnp/xml/serializer.rb b/lib/worldpay_cnp/xml/serializer.rb index a262cff..87a99ef 100644 --- a/lib/worldpay_cnp/xml/serializer.rb +++ b/lib/worldpay_cnp/xml/serializer.rb @@ -7,7 +7,7 @@ def call(hash) private - def attributes_or_elements!(parent, key, value) + def attributes_or_elements!(document, parent, key, value) raise NotImplementedError end @@ -15,12 +15,13 @@ def insert_text!(element, text) raise NotImplementedError end - def add_xml_elements!(parent, obj) + def add_xml_elements!(document, parent, obj) + parent = document if parent.nil? case obj when Hash - obj.each { |key, value| attributes_or_elements!(parent, key, value) } + obj.each { |key, value| attributes_or_elements!(document, parent, key, value) } when Array - obj.each { |value| add_xml_elements!(parent, value) } + obj.each { |value| add_xml_elements!(document, parent, value) } else insert_text!(parent, obj) end