diff options
author | Eric Anderson <eric@bloodhub.com> | 2018-08-09 12:00:23 -0400 |
---|---|---|
committer | Eric Anderson <eric@bloodhub.com> | 2018-08-09 12:00:23 -0400 |
commit | 34326af1d44be1c17fb8208578b25d7162a118fe (patch) | |
tree | ad51922794e5938fc35bf2bc2d9006116da511a6 | |
parent | 3000c1490565b3a21376d6444cb6fe24dfe4e383 (diff) | |
download | rails-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.
-rw-r--r-- | actionpack/lib/action_controller/metal/flash.rb | 8 | ||||
-rw-r--r-- | actionpack/test/controller/flash_test.rb | 8 |
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 |