aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/CHANGELOG2
-rw-r--r--actionpack/lib/action_controller/cookies.rb8
-rw-r--r--actionpack/test/controller/cookie_test.rb11
3 files changed, 18 insertions, 3 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG
index 917303797f..83e4a492ed 100644
--- a/actionpack/CHANGELOG
+++ b/actionpack/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Allow you to delete cookies with options. Closes #3685 [josh, Chris Wanstrath]
+
* Allow you to render views with periods in the name. Closes #8076 [norbert]
render :partial => 'show.html.erb'
diff --git a/actionpack/lib/action_controller/cookies.rb b/actionpack/lib/action_controller/cookies.rb
index 52423aa61b..d337491ecb 100644
--- a/actionpack/lib/action_controller/cookies.rb
+++ b/actionpack/lib/action_controller/cookies.rb
@@ -62,9 +62,11 @@ module ActionController #:nodoc:
end
# Removes the cookie on the client machine by setting the value to an empty string
- # and setting its expiration date into the past
- def delete(name)
- set_cookie("name" => name.to_s, "value" => "", "expires" => Time.at(0))
+ # and setting its expiration date into the past. Like []=, you can pass in an options
+ # hash to delete cookies with extra data such as a +path+.
+ def delete(name, options = {})
+ options.stringify_keys!
+ set_cookie(options.merge("name" => name.to_s, "value" => "", "expires" => Time.at(0)))
end
private
diff --git a/actionpack/test/controller/cookie_test.rb b/actionpack/test/controller/cookie_test.rb
index 5bab99fdca..44023b0791 100644
--- a/actionpack/test/controller/cookie_test.rb
+++ b/actionpack/test/controller/cookie_test.rb
@@ -31,6 +31,11 @@ class CookieTest < Test::Unit::TestCase
cookies.delete("user_name")
end
+ def delete_cookie_with_path
+ cookies.delete("user_name", :path => '/beaten')
+ render_text "hello world"
+ end
+
def rescue_action(e)
raise unless ActionController::MissingTemplate # No templates here, and we don't care about the output
end
@@ -85,4 +90,10 @@ class CookieTest < Test::Unit::TestCase
assert_equal "david", jar["user_name"]
assert_equal nil, jar["something_else"]
end
+
+ def test_delete_cookie_with_path
+ get :delete_cookie_with_path
+ assert_equal "/beaten", @response.headers["cookie"].first.path
+ assert_not_equal "/", @response.headers["cookie"].first.path
+ end
end