This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From d75eb570e16f765b5c6acee8f1fc1c8013eeba4f Mon Sep 17 00:00:00 2001 | |
From: Szymon Nowak <szimek@gmail.com> | |
Date: Mon, 11 Oct 2010 19:37:03 +0200 | |
Subject: [PATCH] Return a valid empty JSON on successful PUT and DELETE requests. | |
--- | |
.../lib/action_controller/metal/responder.rb | 20 ++++++++++++++++++++ | |
actionpack/test/controller/mime_responds_test.rb | 19 +++++++++++++++++++ | |
2 files changed, 39 insertions(+), 0 deletions(-) | |
diff --git a/actionpack/lib/action_controller/metal/responder.rb b/actionpack/lib/action_controller/metal/responder.rb | |
index 851925e..38d3221 100644 | |
--- a/actionpack/lib/action_controller/metal/responder.rb | |
+++ b/actionpack/lib/action_controller/metal/responder.rb | |
@@ -161,6 +161,8 @@ module ActionController #:nodoc: | |
display resource.errors, :status => :unprocessable_entity | |
elsif post? | |
display resource, :status => :created, :location => api_location | |
+ elsif has_empty_resource_definition? | |
+ display empty_resource, :status => :ok | |
else | |
head :ok | |
end | |
@@ -221,5 +223,23 @@ module ActionController #:nodoc: | |
def default_action | |
@action ||= ACTIONS_FOR_VERBS[request.request_method_symbol] | |
end | |
+ | |
+ # Check whether resource needs a specific definition of empty resource to be valid | |
+ # | |
+ def has_empty_resource_definition? | |
+ respond_to?("empty_#{format}_resource") | |
+ end | |
+ | |
+ # Delegate to proper empty resource method | |
+ # | |
+ def empty_resource | |
+ send("empty_#{format}_resource") | |
+ end | |
+ | |
+ # Return a valid empty JSON resource | |
+ # | |
+ def empty_json_resource | |
+ "{}" | |
+ end | |
end | |
end | |
diff --git a/actionpack/test/controller/mime_responds_test.rb b/actionpack/test/controller/mime_responds_test.rb | |
index adccfa0..a898ef7 100644 | |
--- a/actionpack/test/controller/mime_responds_test.rb | |
+++ b/actionpack/test/controller/mime_responds_test.rb | |
@@ -709,6 +709,15 @@ class RespondWithControllerTest < ActionController::TestCase | |
assert_equal " ", @response.body | |
end | |
+ def test_using_resource_for_put_with_json_yields_ok_on_success | |
+ Customer.any_instance.stubs(:to_json).returns('{"name": "David"}') | |
+ @request.accept = "application/json" | |
+ put :using_resource | |
+ assert_equal "application/json", @response.content_type | |
+ assert_equal 200, @response.status | |
+ assert_equal "{}", @response.body | |
+ end | |
+ | |
def test_using_resource_for_put_with_xml_yields_unprocessable_entity_on_failure | |
@request.accept = "application/xml" | |
errors = { :name => :invalid } | |
@@ -739,6 +748,16 @@ class RespondWithControllerTest < ActionController::TestCase | |
assert_equal " ", @response.body | |
end | |
+ def test_using_resource_for_delete_with_json_yields_ok_on_success | |
+ Customer.any_instance.stubs(:to_json).returns('{"name": "David"}') | |
+ Customer.any_instance.stubs(:destroyed?).returns(true) | |
+ @request.accept = "application/json" | |
+ delete :using_resource | |
+ assert_equal "application/json", @response.content_type | |
+ assert_equal 200, @response.status | |
+ assert_equal "{}", @response.body | |
+ end | |
+ | |
def test_using_resource_for_delete_with_html_redirects_on_failure | |
with_test_route_set do | |
errors = { :name => :invalid } | |
-- | |
1.7.3 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment