From 43f59f20388186864b3c6e488beef958201b9ec6 Mon Sep 17 00:00:00 2001 From: Igor Fedoronchuk Date: Thu, 21 May 2026 10:24:09 +0200 Subject: [PATCH] fix: register IndexAsCalendar at gem-require time, not via to_prepare `config.to_prepare` fires after the application's initializers, which is too late for consuming engines that `require` AA resource files from an initializer (a pattern AA permits via `config.load_paths`). Those resources hit: NameError: uninitialized constant ActiveAdmin::Views::IndexAsCalendar Adopt the pattern used by sibling AA plugins (`active_admin_sidebar`, etc.): `require "activeadmin"` at the top of the gem's main file so `ActiveAdmin::Views` is guaranteed to exist, then eagerly require the view component. The Engine class is kept (empty) so Propshaft / AA 4 can still discover `app/assets/stylesheets/activeadmin_calendar.css`. --- lib/activeadmin_calendar.rb | 7 +++++++ lib/activeadmin_calendar/engine.rb | 7 ++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/activeadmin_calendar.rb b/lib/activeadmin_calendar.rb index 9f5564a..526a853 100644 --- a/lib/activeadmin_calendar.rb +++ b/lib/activeadmin_calendar.rb @@ -1,8 +1,15 @@ # frozen_string_literal: true +# Load ActiveAdmin first so `ActiveAdmin::Views` exists by the time we +# register the view component. AA doesn't publish a load hook for itself +# (only `:active_admin_controller`), and `config.to_prepare` would fire +# too late for engines that require AA resources from an initializer. +# Sibling plugins (active_admin_sidebar, etc.) use the same pattern. +require "activeadmin" require "activeadmin_calendar/version" module ActiveadminCalendar end require "activeadmin_calendar/engine" if defined?(Rails) +require "activeadmin_calendar/index_as_calendar" diff --git a/lib/activeadmin_calendar/engine.rb b/lib/activeadmin_calendar/engine.rb index 00a6416..ac5da81 100644 --- a/lib/activeadmin_calendar/engine.rb +++ b/lib/activeadmin_calendar/engine.rb @@ -3,9 +3,10 @@ require "rails/engine" module ActiveadminCalendar + # Empty engine — kept so Propshaft / Tailwind can discover this gem's + # `app/assets/stylesheets` directory on AA 4. The view component + # itself is required eagerly from `lib/activeadmin_calendar.rb` so it + # is available before AA resources are loaded. class Engine < ::Rails::Engine - config.to_prepare do - require "activeadmin_calendar/index_as_calendar" - end end end