Skip to content

Commit e275012

Browse files
committed
Prevent autoloading on initialization for Zeitwerk compatibility
Fixes #3190
1 parent 43778cb commit e275012

7 files changed

Lines changed: 30 additions & 15 deletions

File tree

app/controllers/rails_admin/application_controller.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ class ActionNotAllowed < ::StandardError
1111
end
1212

1313
class ApplicationController < Config.parent_controller.constantize
14+
include RailsAdmin::Extensions::ControllerExtension
15+
1416
protect_from_forgery(Config.forgery_protection_settings)
1517

1618
before_action :_authenticate!

lib/rails_admin/extension.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
require 'rails_admin/extensions/controller_extension'
12

23
module RailsAdmin
34
EXTENSIONS = [] # rubocop:disable Style/MutableConstant
@@ -26,4 +27,15 @@ def self.add_extension(extension_key, extension_definition, options = {})
2627
AUDITING_ADAPTERS[extension_key] = extension_definition::AuditingAdapter
2728
end
2829
end
30+
31+
# Setup all extensions for testing
32+
def self.setup_all_extensions
33+
(AUTHORIZATION_ADAPTERS.values + AUDITING_ADAPTERS.values).each do |klass|
34+
begin
35+
klass.setup if klass.respond_to? :setup
36+
rescue # rubocop:disable Lint/HandleExceptions
37+
# ignore errors
38+
end
39+
end
40+
end
2941
end
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
module RailsAdmin
2+
module Extensions
3+
module ControllerExtension
4+
end
5+
end
6+
end

lib/rails_admin/extensions/paper_trail/auditing_adapter.rb

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ def item
3131
end
3232
end
3333

34+
module ControllerExtension
35+
def user_for_paper_trail
36+
_current_user.try(:id) || _current_user
37+
end
38+
end
39+
3440
class AuditingAdapter
3541
COLUMN_MAPPING = {
3642
table: :item_type,
@@ -52,11 +58,7 @@ class AuditingAdapter
5258

5359
def self.setup
5460
raise('PaperTrail not found') unless defined?(::PaperTrail)
55-
RailsAdmin::ApplicationController.class_eval do
56-
def user_for_paper_trail
57-
_current_user.try(:id) || _current_user
58-
end
59-
end
61+
RailsAdmin::Extensions::ControllerExtension.send(:include, ControllerExtension)
6062
end
6163

6264
def initialize(controller, user_class = 'User', version_class = '::Version')

lib/rails_admin/extensions/pundit/authorization_adapter.rb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@ module Pundit
77
class AuthorizationAdapter
88
# This method is called first time only and used for setup
99
def self.setup
10-
RailsAdmin::ApplicationController.class_eval do
11-
include ::Pundit
12-
end unless RailsAdmin::ApplicationController.ancestors.include? 'Pundit'
10+
RailsAdmin::Extensions::ControllerExtension.send(:include, ::Pundit)
1311
end
1412

1513
# See the +authorize_with+ config method for where the initialization happens.

spec/integration/history/rails_admin_paper_trail_spec.rb

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,6 @@
99
end
1010
end
1111

12-
after(:each) do
13-
# if #user_for_paper_trail is left unused, PaperTrail complains about it
14-
RailsAdmin::ApplicationController.class_eval do
15-
undef user_for_paper_trail
16-
end
17-
end
18-
1912
shared_examples :paper_on_object_creation do
2013
describe 'on object creation', type: :request do
2114
subject { page }

spec/spec_helper.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ def password_digest(password)
5656
Capybara.javascript_driver = :poltergeist
5757
Capybara.server = :webrick
5858

59+
RailsAdmin.setup_all_extensions
60+
5961
RSpec.configure do |config|
6062
config.expect_with :rspec do |c|
6163
c.syntax = :expect

0 commit comments

Comments
 (0)