This commit is contained in:
Marcos Ferreira 2019-10-29 13:51:33 -03:00
parent 885c61ece3
commit f78eed69e9
No known key found for this signature in database
GPG Key ID: 55332D1086F6114C
4 changed files with 34 additions and 0 deletions

View File

@ -305,6 +305,10 @@ module Devise
defined?(ActiveRecord) && ActiveRecord.gem_version >= Gem::Version.new("5.1.x")
end
def self.rails6_and_up?
Rails.gem_version >= Gem::Version.new("6.0.x")
end
# Default way to set up Devise. Run rails generate devise_install to create
# a fresh initializer with all configuration values.
def self.setup

View File

@ -43,5 +43,11 @@ module Devise
)
end
end
initializer "devise.zeitwerk" do
if Devise.rails6_and_up? && Rails.autoloaders.zeitwerk_enabled? && !Object.const_defined?(Devise.parent_mailer)
Rails.autoloaders.main.ignore("#{__dir__}/app/mailers/devise/mailer.rb")
end
end
end
end

View File

@ -49,5 +49,9 @@ module RailsApp
if Devise::Test.rails52_and_up? && !Devise::Test.rails6?
Rails.application.config.active_record.sqlite3.represent_boolean_as_integer = true
end
if Devise.rails6_and_up?
config.autoloader = :zeitwerk
end
end
end

View File

@ -8,4 +8,24 @@ class RailsTest < ActiveSupport::TestCase
assert_equal :load_config_initializers, initializer.after
assert_equal :build_middleware_stack, initializer.before
end
test 'ignore devise mailer loading when ActionMailer is not defined with zeitwerk' do
if Devise.rails6_and_up?
begin
swap Devise, parent_mailer: 'NotDefinedParentMailer' do
Devise::Engine.initializers.detect { |initializer| initializer.name == 'devise.zeitwerk' }.block.call
assert Rails.autoloaders.main.ignored_glob_patterns.any? { |pattern| pattern.include?("mailer.rb") }
end
ensure
Rails.autoloaders.main.instance_variable_set(:@ignored_glob_patterns, Set.new)
end
end
end
test 'load devise mailer file when Devise.parent_mailer is defined with zeitwerk' do
if Devise.rails6_and_up?
Devise::Engine.initializers.detect { |initializer| initializer.name == 'devise.zeitwerk' }.block.call
refute Rails.autoloaders.main.ignored_glob_patterns.any? { |pattern| pattern.include?("mailer.rb") }
end
end
end