aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/lib/abstract_controller/helpers.rb7
-rw-r--r--actionpack/test/abstract/helper_test.rb21
-rw-r--r--actionpack/test/fixtures/helpers/helpery_test_helper.rb5
3 files changed, 31 insertions, 2 deletions
diff --git a/actionpack/lib/abstract_controller/helpers.rb b/actionpack/lib/abstract_controller/helpers.rb
index 0c96a6ed15..a0ce121ade 100644
--- a/actionpack/lib/abstract_controller/helpers.rb
+++ b/actionpack/lib/abstract_controller/helpers.rb
@@ -95,6 +95,13 @@ module AbstractController
_helpers.module_eval(&block) if block_given?
end
+ # Clears up all existing helpers in this class, only keeping the helper
+ # with the same name as this class.
+ def clear_helpers
+ self._helpers = Module.new
+ default_helper_module! unless anonymous?
+ end
+
private
# Makes all the (instance) methods in the helper module available to templates
# rendered through this controller.
diff --git a/actionpack/test/abstract/helper_test.rb b/actionpack/test/abstract/helper_test.rb
index 73941222dc..b28a5b5afb 100644
--- a/actionpack/test/abstract/helper_test.rb
+++ b/actionpack/test/abstract/helper_test.rb
@@ -38,6 +38,10 @@ module AbstractController
end
end
+ class ::HelperyTestController < AbstractHelpers
+ clear_helpers
+ end
+
class AbstractHelpersBlock < ControllerWithHelpers
helper do
include ::AbstractController::Testing::HelperyTest
@@ -45,7 +49,6 @@ module AbstractController
end
class TestHelpers < ActiveSupport::TestCase
-
def setup
@controller = AbstractHelpers.new
end
@@ -74,8 +77,22 @@ module AbstractController
@controller.process(:with_module)
assert_equal "Module Included", @controller.response_body
end
-
end
+ class ClearHelpersTest < ActiveSupport::TestCase
+ def setup
+ @controller = HelperyTestController.new
+ end
+
+ def test_clears_up_previous_helpers
+ @controller.process(:with_symbol)
+ assert_equal "I respond to bare_a: false", @controller.response_body
+ end
+
+ def test_includes_controller_default_helper
+ @controller.process(:with_block)
+ assert_equal "Hello Default", @controller.response_body
+ end
+ end
end
end
diff --git a/actionpack/test/fixtures/helpers/helpery_test_helper.rb b/actionpack/test/fixtures/helpers/helpery_test_helper.rb
new file mode 100644
index 0000000000..a4f2951efa
--- /dev/null
+++ b/actionpack/test/fixtures/helpers/helpery_test_helper.rb
@@ -0,0 +1,5 @@
+module HelperyTestHelper
+ def helpery_test
+ "Default"
+ end
+end