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