diff --git a/lib/grape/middleware/base.rb b/lib/grape/middleware/base.rb
index 089878d27..5ffb55114 100644
--- a/lib/grape/middleware/base.rb
+++ b/lib/grape/middleware/base.rb
@@ -54,6 +54,7 @@ module Formats
FORMATTERS = {
:json => :encode_json,
:txt => :encode_txt,
+ :xml => :encode_xml
}
PARSERS = {
:json => :decode_json
@@ -120,6 +121,10 @@ def encode_json(object)
def encode_txt(object)
object.respond_to?(:to_txt) ? object.to_txt : object.to_s
end
+
+ def encode_xml(object)
+ object.respond_to?(:to_xml) ? object.to_xml : object.to_s
+ end
end
end
diff --git a/spec/grape/middleware/formatter_spec.rb b/spec/grape/middleware/formatter_spec.rb
index d8c676283..dafadbcd6 100644
--- a/spec/grape/middleware/formatter_spec.rb
+++ b/spec/grape/middleware/formatter_spec.rb
@@ -35,6 +35,17 @@ def serializable_hash
subject.call({'PATH_INFO' => '/somewhere'}).last.each{|b| b.should == '{"abc":"def"}'}
end
+
+ it 'should call #to_xml if the content type is xml' do
+ @body = "string"
+ @body.instance_eval do
+ def to_xml
+ ""
+ end
+ end
+
+ subject.call({'PATH_INFO' => '/somewhere.xml'}).last.each{|b| b.should == ''}
+ end
end
context 'detection' do