aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcel Molina <marcel@vernix.org>2007-05-06 04:17:01 +0000
committerMarcel Molina <marcel@vernix.org>2007-05-06 04:17:01 +0000
commitdac6aae7f87313e20e8a50b8b405c3799c4e8ffe (patch)
tree68fec7367829a06c1dc380dae821d5c2f159a932
parent67ca9224d709e28bfd5802b1f44969d621b0ea8f (diff)
downloadrails-dac6aae7f87313e20e8a50b8b405c3799c4e8ffe.tar.gz
rails-dac6aae7f87313e20e8a50b8b405c3799c4e8ffe.tar.bz2
rails-dac6aae7f87313e20e8a50b8b405c3799c4e8ffe.zip
Sweep flash when filter chain is halted. Closes #6175. [Caio Chassot <lists@v2studio.com>]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6670 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
-rw-r--r--actionpack/CHANGELOG2
-rw-r--r--actionpack/lib/action_controller/filters.rb8
-rw-r--r--actionpack/lib/action_controller/flash.rb2
-rw-r--r--actionpack/test/controller/flash_test.rb45
4 files changed, 48 insertions, 9 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG
index 2c1085738c..2d939a5e09 100644
--- a/actionpack/CHANGELOG
+++ b/actionpack/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Sweep flash when filter chain is halted. [Caio Chassot <lists@v2studio.com>]
+
* Fixed that content_tag with a block will just return the result instead of concate it if not used in a ERb view #7857, #7432 [michael.niessner]
* Replace the current block/continuation filter chain handling by an implementation based on a simple loop. #8226 [Stefan Kaes]
diff --git a/actionpack/lib/action_controller/filters.rb b/actionpack/lib/action_controller/filters.rb
index d87df2577c..58f0ca491d 100644
--- a/actionpack/lib/action_controller/filters.rb
+++ b/actionpack/lib/action_controller/filters.rb
@@ -672,7 +672,6 @@ module ActionController #:nodoc:
base.class_eval do
alias_method_chain :perform_action, :filters
alias_method_chain :process, :filters
- alias_method_chain :process_cleanup, :filters
end
end
@@ -748,13 +747,6 @@ module ActionController #:nodoc:
call_filters(self.class.filter_chain, 0, 0)
end
- def process_cleanup_with_filters
- if @before_filter_chain_aborted
- close_session
- else
- process_cleanup_without_filters
- end
- end
end
end
end
diff --git a/actionpack/lib/action_controller/flash.rb b/actionpack/lib/action_controller/flash.rb
index 2544db2fda..534c74745e 100644
--- a/actionpack/lib/action_controller/flash.rb
+++ b/actionpack/lib/action_controller/flash.rb
@@ -63,7 +63,7 @@ module ActionController #:nodoc:
end
def update(h) #:nodoc:
- h.keys.each{ |k| discard(k) }
+ h.keys.each { |k| keep(k) }
super
end
diff --git a/actionpack/test/controller/flash_test.rb b/actionpack/test/controller/flash_test.rb
index d12ced8530..496af2b47a 100644
--- a/actionpack/test/controller/flash_test.rb
+++ b/actionpack/test/controller/flash_test.rb
@@ -34,6 +34,12 @@ class FlashTest < Test::Unit::TestCase
silence_warnings { keep_flash }
render :inline => "hello"
end
+
+ def use_flash_and_update_it
+ flash.update("this" => "hello again")
+ @flash_copy = {}.update flash
+ render :inline => "hello"
+ end
def use_flash_after_reset_session
flash["that"] = "hello"
@@ -48,6 +54,24 @@ class FlashTest < Test::Unit::TestCase
def rescue_action(e)
raise unless ActionController::MissingTemplate === e
end
+
+ # methods for test_sweep_after_halted_filter_chain
+ before_filter :halt_and_redir, :only => "filter_halting_action"
+
+ def std_action
+ @flash_copy = {}.update(flash)
+ end
+
+ def filter_halting_action
+ @flash_copy = {}.update(flash)
+ end
+
+ def halt_and_redir
+ flash["foo"] = "bar"
+ redirect_to :action => "std_action"
+ @flash_copy = {}.update(flash)
+ false
+ end
end
def setup
@@ -93,10 +117,31 @@ class FlashTest < Test::Unit::TestCase
assert_nil @response.template.assigns["flashy"]
end
+ def test_update_flash
+ get :set_flash
+ get :use_flash_and_update_it
+ assert_equal "hello", @response.template.assigns["flash_copy"]["that"]
+ assert_equal "hello again", @response.template.assigns["flash_copy"]["this"]
+ get :use_flash
+ assert_nil @response.template.assigns["flash_copy"]["that"], "On second flash"
+ assert_equal "hello again", @response.template.assigns["flash_copy"]["this"], "On second flash"
+ end
+
def test_flash_after_reset_session
get :use_flash_after_reset_session
assert_equal "hello", @response.template.assigns["flashy_that"]
assert_equal "good-bye", @response.template.assigns["flashy_this"]
assert_nil @response.template.assigns["flashy_that_reset"]
end
+
+ def test_sweep_after_halted_filter_chain
+ get :std_action
+ assert_nil @response.template.assigns["flash_copy"]["foo"]
+ get :filter_halting_action
+ assert_equal "bar", @response.template.assigns["flash_copy"]["foo"]
+ get :std_action # follow redirection
+ assert_equal "bar", @response.template.assigns["flash_copy"]["foo"]
+ get :std_action
+ assert_nil @response.template.assigns["flash_copy"]["foo"]
+ end
end