From 82d70d1d16443edc787b2a3acf99dd1ff7f8fdcc Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 24 Apr 2007 18:29:37 +0000 Subject: Added that render :xml will try to call to_xml if it can [DHH] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6574 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/CHANGELOG | 5 +++++ actionpack/lib/action_controller/base.rb | 2 +- actionpack/test/controller/new_render_test.rb | 26 +++++++++++++++++++++++++- actionpack/test/controller/render_test.rb | 9 --------- 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 040d1162ad..9797f24410 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,10 @@ *SVN* +* Added that render :xml will try to call to_xml if it can [DHH]. Makes these work: + + render :xml => post + render :xml => comments + * Added :location option to render so that the common pattern of rendering a response after creating a new resource is now a 1-liner [DHH] render :xml => post.to_xml, :status => :created, :location => post_url(post) diff --git a/actionpack/lib/action_controller/base.rb b/actionpack/lib/action_controller/base.rb index c0c91a3ac9..c1c9e57342 100755 --- a/actionpack/lib/action_controller/base.rb +++ b/actionpack/lib/action_controller/base.rb @@ -879,7 +879,7 @@ module ActionController #:nodoc: def render_xml(xml, status = nil) #:nodoc: response.content_type = Mime::XML - render_text(xml, status) + render_text(xml.respond_to?(:to_xml) ? xml.to_xml : xml, status) end def render_json(json, callback = nil, status = nil) #:nodoc: diff --git a/actionpack/test/controller/new_render_test.rb b/actionpack/test/controller/new_render_test.rb index 0765772e06..18a32f6e30 100644 --- a/actionpack/test/controller/new_render_test.rb +++ b/actionpack/test/controller/new_render_test.rb @@ -258,6 +258,20 @@ class NewRenderTestController < ActionController::Base head :forbidden, :x_custom_header => "something" end + def render_with_location + render :xml => "", :location => "http://example.com", :status => 201 + end + + def render_with_to_xml + to_xmlable = Class.new do + def to_xml + "" + end + end.new + + render :xml => to_xmlable + end + helper NewRenderTestHelper helper do def rjs_helper_method(value) @@ -742,4 +756,14 @@ EOS assert_equal "something", @response.headers["X-Custom-Header"] assert_response :forbidden end -end + + def test_rendering_with_location_should_set_header + get :render_with_location + assert_equal "http://example.com", @response.headers["Location"] + end + + def test_rendering_xml_should_call_to_xml_if_possible + get :render_with_to_xml + assert_equal "", @response.body + end +end \ No newline at end of file diff --git a/actionpack/test/controller/render_test.rb b/actionpack/test/controller/render_test.rb index eb23ed0c5b..d51af51454 100644 --- a/actionpack/test/controller/render_test.rb +++ b/actionpack/test/controller/render_test.rb @@ -73,10 +73,6 @@ class TestController < ActionController::Base head :ok end - def location - render :xml => "", :location => "http://example.com", :status => 201 - end - def greeting # let's just rely on the template end @@ -372,11 +368,6 @@ class RenderTest < Test::Unit::TestCase assert_equal 'passed formatted html erb', @response.body end - def test_rendering_with_location_should_set_header - get :location - assert_equal "http://example.com", @response.headers["Location"] - end - protected def assert_deprecated_render(&block) -- cgit v1.2.3