From fd65d89e07d57d809c69043b52a3a1319fb3c2ad Mon Sep 17 00:00:00 2001 From: Michael Koziarski Date: Sun, 1 Jul 2007 23:27:59 +0000 Subject: [PATCH] Allow you to delete cookies with options. Closes #3685 [josh, Chris Wanstrath] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7160 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/CHANGELOG | 2 ++ actionpack/lib/action_controller/cookies.rb | 8 +++++--- actionpack/test/controller/cookie_test.rb | 11 +++++++++++ 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