aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
authorEric Anderson <eric@bloodhub.com>2018-08-09 12:00:23 -0400
committerEric Anderson <eric@bloodhub.com>2018-08-09 12:00:23 -0400
commit34326af1d44be1c17fb8208578b25d7162a118fe (patch)
treead51922794e5938fc35bf2bc2d9006116da511a6 /actionpack
parent3000c1490565b3a21376d6444cb6fe24dfe4e383 (diff)
downloadrails-34326af1d44be1c17fb8208578b25d7162a118fe.tar.gz
rails-34326af1d44be1c17fb8208578b25d7162a118fe.tar.bz2
rails-34326af1d44be1c17fb8208578b25d7162a118fe.zip
Conditionally use `helper_method` in Flash concern
I was attempting to use the `flash` functionality in a `Metal` controller. When including the `flash` concern I received the following error: NoMethodError: undefined method `helper_method'.... Either: - `AbstractController::Helpers` should be a dependency of `ActionController::Flash` - `ActionController::Flash` should not require the existence of `AbstractController::Helpers`. Since my use case (set a flash and redirect) has no need for the helper method and that is a common use case, making the dependency conditional seemed the better option. NOTE: This is similar to issue #21067 only the error is within Rails itself while that issue had the error within Devise.
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/lib/action_controller/metal/flash.rb8
-rw-r--r--actionpack/test/controller/flash_test.rb8
2 files changed, 13 insertions, 3 deletions
diff --git a/actionpack/lib/action_controller/metal/flash.rb b/actionpack/lib/action_controller/metal/flash.rb
index 5115c2fadf..1ecee811fb 100644
--- a/actionpack/lib/action_controller/metal/flash.rb
+++ b/actionpack/lib/action_controller/metal/flash.rb
@@ -33,10 +33,12 @@ module ActionController #:nodoc:
types.each do |type|
next if _flash_types.include?(type)
- define_method(type) do
- request.flash[type]
+ if respond_to? :helper_method
+ define_method(type) do
+ request.flash[type]
+ end
+ helper_method type
end
- helper_method type
self._flash_types += [type]
end
diff --git a/actionpack/test/controller/flash_test.rb b/actionpack/test/controller/flash_test.rb
index 34bc2c0caa..a4330897cf 100644
--- a/actionpack/test/controller/flash_test.rb
+++ b/actionpack/test/controller/flash_test.rb
@@ -342,6 +342,14 @@ class FlashIntegrationTest < ActionDispatch::IntegrationTest
end
end
+ def test_flash_usable_in_metal_without_helper
+ assert_nothing_raised do
+ Class.new ActionController::Metal do
+ include ActionController::Flash
+ end
+ end
+ end
+
private
# Overwrite get to send SessionSecret in env hash