Skip to content

Commit

Permalink
Fix ActiveJob::Performs not being automatically extended
Browse files Browse the repository at this point in the history
`ActiveSupport.on_load :active_job` may not fire after the application has loaded (since it happens when Active Job is first mentioned and then it's loaded),
which means any Associated Objects loaded would not have `performs` defined and we'd raise.

The short curcuit was to only inject performs if users were using Active Job, but it's too clever.

We're now being less clever and letting bundler load every gem first via deferring our extension to the others in `config.after_initialize`.
  • Loading branch information
kaspth committed Dec 13, 2024
1 parent d239990 commit 58643ed
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 9 deletions.
9 changes: 2 additions & 7 deletions lib/active_record/associated_object/railtie.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,12 @@ class ActiveRecord::AssociatedObject::Railtie < Rails::Railtie
config.after_initialize do
ActiveRecord::AssociatedObject.include Kredis::Attributes if defined?(Kredis)
ActiveRecord::AssociatedObject.include GlobalID::Identification if defined?(GlobalID)

ActiveRecord::AssociatedObject.extend ActiveJob::Performs if defined?(ActiveJob::Performs)
end
end

initializer "object_association.setup" do
ActiveSupport.on_load :active_job do
require "active_job/performs"
ActiveRecord::AssociatedObject.extend ActiveJob::Performs
rescue LoadError
# We haven't bundled active_job-performs, so we're continuing without it.
end

ActiveSupport.on_load :active_record do
require "active_record/associated_object/object_association"
include ActiveRecord::AssociatedObject::ObjectAssociation
Expand Down
6 changes: 4 additions & 2 deletions test/test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,16 @@

require "rails/railtie"
require "kredis"
require "active_job"
require "global_id"
require "debug"
require "logger"

require "active_record"
require "active_record/associated_object"

require "global_id"
require "active_job"
require "active_job/performs"

require "minitest/autorun"

# Simulate Rails app boot and run the railtie initializers manually.
Expand Down

0 comments on commit 58643ed

Please sign in to comment.