diff options
author | Brian John <brian@brianjohn.com> | 2012-07-18 19:50:25 -0500 |
---|---|---|
committer | Brian John <brian@brianjohn.com> | 2012-07-20 05:49:45 -0500 |
commit | 35fe3107a39271c9694e5094c1352c30463582e4 (patch) | |
tree | 08a0272b95f17c9a3036f54badc7d8e12e050ec8 /actionpack | |
parent | e482100d6ed022d00ba31c6c4377f6f947173337 (diff) | |
download | rails-35fe3107a39271c9694e5094c1352c30463582e4.tar.gz rails-35fe3107a39271c9694e5094c1352c30463582e4.tar.bz2 rails-35fe3107a39271c9694e5094c1352c30463582e4.zip |
Clean up Sweeper controller accessor when an Error is raised
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/lib/action_controller/caching/sweeping.rb | 9 | ||||
-rw-r--r-- | actionpack/test/controller/filters_test.rb | 11 |
2 files changed, 18 insertions, 2 deletions
diff --git a/actionpack/lib/action_controller/caching/sweeping.rb b/actionpack/lib/action_controller/caching/sweeping.rb index 39da15e26a..73291ce083 100644 --- a/actionpack/lib/action_controller/caching/sweeping.rb +++ b/actionpack/lib/action_controller/caching/sweeping.rb @@ -68,14 +68,14 @@ module ActionController #:nodoc: def after(controller) self.controller = controller callback(:after) if controller.perform_caching - # Clean up, so that the controller can be collected after this request - self.controller = nil end def around(controller) before(controller) yield after(controller) + ensure + clean_up end protected @@ -90,6 +90,11 @@ module ActionController #:nodoc: end private + def clean_up + # Clean up, so that the controller can be collected after this request + self.controller = nil + end + def callback(timing) controller_callback_method_name = "#{timing}_#{controller.controller_name.underscore}" action_callback_method_name = "#{controller_callback_method_name}_#{controller.action_name}" diff --git a/actionpack/test/controller/filters_test.rb b/actionpack/test/controller/filters_test.rb index b9cb93f0f4..afc00a3c9d 100644 --- a/actionpack/test/controller/filters_test.rb +++ b/actionpack/test/controller/filters_test.rb @@ -505,6 +505,10 @@ class FilterTest < ActionController::TestCase def show render :text => 'hello world' end + + def error + raise StandardError.new + end end class ImplicitActionsController < ActionController::Base @@ -534,6 +538,13 @@ class FilterTest < ActionController::TestCase assert_equal 'hello world', response.body end + def test_sweeper_should_clean_up_if_exception_is_raised + assert_raise StandardError do + test_process(SweeperTestController, 'error') + end + assert_nil AppSweeper.instance.controller + end + def test_before_method_of_sweeper_should_always_return_true sweeper = ActionController::Caching::Sweeper.send(:new) assert sweeper.before(TestController.new) |