require 'rexml/document'

module DataMapper
  module Serializer
    module XML
      module REXML
        def self.new_document
          ::REXML::Document.new
        end

        def self.root_node(document, name, attrs = {})
          add_node(document.root || document, name, nil, attrs)
        end

        def self.add_node(parent, name, value, attrs = {})
          node = parent.add_element(name)

          attrs.each do |attr_name, attr_val|
            node.attributes[attr_name] = attr_val
          end

          node << ::REXML::Text.new(value.to_s) unless value.nil?
          node
        end

        def self.add_xml(parent, xml)
          parent.add(xml)
        end

        def self.output(doc)
          doc.to_s
        end
      end
    end
  end
end
