diff options
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/CHANGELOG | 2 | ||||
-rw-r--r-- | actionpack/lib/action_controller/filters.rb | 8 | ||||
-rw-r--r-- | actionpack/lib/action_controller/flash.rb | 2 | ||||
-rw-r--r-- | actionpack/test/controller/flash_test.rb | 45 |
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 |