diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2675e50..a256498 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,6 +28,22 @@ jobs: - ruby: '2.7' rails: '6.1' bundler: 'default' + - ruby: '3.0' + rails: '6.1' + bundler: 'default' + - ruby: '3.1' + rails: '6.1' + bundler: 'default' + - ruby: '3.2' + rails: '7' + bundler: 'default' + - ruby: '3.3' + rails: '7' + bundler: 'default' + - ruby: '3.4' + rails: '8' + bundler: 'default' + env: RAILS_VERSION: ${{ matrix.rails }} @@ -39,14 +55,14 @@ jobs: bundler: ${{ matrix.bundler }} bundler-cache: true - run: bundle exec rubocop - if: matrix.ruby == '2.7' + if: matrix.ruby == '3.4' - run: bundle exec rspec --format doc - uses: codecov/codecov-action@v3 - if: matrix.ruby == '2.7' + if: matrix.ruby == '3.4' with: files: coverage/coverage.xml - run: bin/yardoc --fail-on-warning - if: matrix.ruby == '2.7' + if: matrix.ruby == '3.4' - run: bin/check-version release: diff --git a/lib/epilog/rails.rb b/lib/epilog/rails.rb index ba4aaf8..c2ca1ca 100644 --- a/lib/epilog/rails.rb +++ b/lib/epilog/rails.rb @@ -1,23 +1,23 @@ # frozen_string_literal: true -require 'action_controller/log_subscriber' -require 'action_dispatch/middleware/debug_exceptions' -require 'action_mailer/log_subscriber' -require 'action_view/log_subscriber' -require 'active_record/log_subscriber' -require 'active_job/logging' +require 'action_controller/log_subscriber' if Gem.loaded_specs.key?('action_controller') +require 'action_dispatch/middleware/debug_exceptions' if Gem.loaded_specs.key?('action_dispatch') +require 'action_mailer/log_subscriber' if Gem.loaded_specs.key?('action_mailer') +require 'action_view/log_subscriber' if Gem.loaded_specs.key?('action_view') +require 'active_record/log_subscriber' if Gem.loaded_specs.key?('active_record') +require 'active_job/logging' if Gem.loaded_specs.key?('active_job') require 'epilog/rails/ext/event_delegate' require 'epilog/rails/ext/active_support_logger' require 'epilog/rails/ext/rack_logger' -require 'epilog/rails/ext/action_controller' +require 'epilog/rails/ext/action_controller' if Gem.loaded_specs.key?('action_controller') require 'epilog/rails/ext/debug_exceptions' require 'epilog/rails/epilog_ext' require 'epilog/rails/log_subscriber' -require 'epilog/rails/action_controller_subscriber' -require 'epilog/rails/action_mailer_subscriber' -require 'epilog/rails/action_view_subscriber' -require 'epilog/rails/active_record_subscriber' -require 'epilog/rails/active_job_subscriber' +require 'epilog/rails/action_controller_subscriber' if Gem.loaded_specs.key?('action_controller') +require 'epilog/rails/action_mailer_subscriber' if Gem.loaded_specs.key?('action_mailer') +require 'epilog/rails/action_view_subscriber' if Gem.loaded_specs.key?('action_view') +require 'epilog/rails/active_record_subscriber' if Gem.loaded_specs.key?('active_record') +require 'epilog/rails/active_job_subscriber' if Gem.loaded_specs.key?('active_job') require 'epilog/rails/railtie' diff --git a/lib/epilog/rails/railtie.rb b/lib/epilog/rails/railtie.rb index 0dace24..39ea609 100644 --- a/lib/epilog/rails/railtie.rb +++ b/lib/epilog/rails/railtie.rb @@ -10,25 +10,25 @@ def self.rails_6_1_higher? # We need this in Rails 6. # Without this line `ActiveJob::LogSubscriber` fails # with unknown contant error - ActiveSupport.run_load_hooks(:active_job, ActiveJob::Base) + ActiveSupport.run_load_hooks(:active_job, ActiveJob::Base) if defined?(ActiveJob::Base) SUBSCRIBERS = { - action_controller: ActionControllerSubscriber, - action_mailer: ActionMailerSubscriber, - action_view: ActionViewSubscriber, - active_record: ActiveRecordSubscriber, - active_job: ActiveJobSubscriber + action_controller: 'ActionControllerSubscriber', + action_mailer: 'ActionMailerSubscriber', + action_view: 'ActionViewSubscriber', + active_record: 'ActiveRecordSubscriber', + active_job: 'ActiveJobSubscriber' }.freeze SUBSCRIBER_BLACKLIST = [ - ActionController::LogSubscriber, - ActionMailer::LogSubscriber, - ActionView::LogSubscriber, - ActiveRecord::LogSubscriber, + 'ActionController::LogSubscriber', + 'ActionMailer::LogSubscriber', + 'ActionView::LogSubscriber', + 'ActiveRecord::LogSubscriber', if rails_6_1_higher? - ActiveJob::LogSubscriber + 'ActiveJob::LogSubscriber' else - ActiveJob::Logging::LogSubscriber + 'ActiveJob::Logging::LogSubscriber' end ].freeze @@ -49,7 +49,9 @@ def self.rails_6_1_higher? ::Rails.logger ||= Logger.new($stdout) app.config.epilog.subscriptions.each do |namespace| - subscriber_class = SUBSCRIBERS[namespace] + subscriber_class = SUBSCRIBERS[namespace].safe_constantize + next unless subscriber_class + subscriber_class.attach_to( namespace, subscriber_class.new(::Rails.logger) @@ -78,7 +80,7 @@ def unsubscribe_listeners(subscriber, pattern) def blacklisted_subscribers ActiveSupport::LogSubscriber.log_subscribers.select do |subscriber| - SUBSCRIBER_BLACKLIST.include?(subscriber.class) + SUBSCRIBER_BLACKLIST.include?(subscriber.class.name) end end end