module DataMapper

  module Serialize

    def to_xml(options = {})
      xml = Builder::XmlMarkup.new(:indent => 2)
      xml.instruct!
      append_resource_xml(xml)        
    end

    protected

    def append_resource_xml(element)
      element.__send__(xml_element_name) do |object|
        self.class.properties(self.repository.name).each do |property|
          object.__send__(property.name, self.send(property.name))
        end
      end
    end

  end

  class Collection

    def to_xml
      xml = Builder::XmlMarkup.new(:indent => 2)
      xml.instruct!
      xml_name = @model.new.send(:xml_element_name)
      xml.__send__(xml_name.pluralize) do |resources_element|
        self.each do |object|
          object.send(:append_resource_xml, resources_element)
        end
      end
    end

  end

end