Merge pull request #43297 from jhawthorn/avoid_callback_class_attrs

Avoid class_attrs for unused collection callbacks
This commit is contained in:
John Hawthorn 2021-09-24 16:26:45 -07:00 committed by GitHub
commit 014347620d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 3 deletions

@ -30,11 +30,18 @@ def self.define_extensions(model, name, &block)
def self.define_callback(model, callback_name, name, options)
full_callback_name = "#{callback_name}_for_#{name}"
unless model.method_defined?(full_callback_name)
callback_values = Array(options[callback_name.to_sym])
method_defined = model.respond_to?(full_callback_name)
# If there are no callbacks, we must also check if a superclass had
# previously defined this association
return if callback_values.empty? && !method_defined
unless method_defined
model.class_attribute(full_callback_name, instance_accessor: false, instance_predicate: false)
end
callbacks = Array(options[callback_name.to_sym]).map do |callback|
callbacks = callback_values.map do |callback|
case callback
when Symbol
->(method, owner, record) { owner.send(callback, record) }

@ -480,7 +480,11 @@ def callback(method, record)
def callbacks_for(callback_name)
full_callback_name = "#{callback_name}_for_#{reflection.name}"
owner.class.send(full_callback_name)
if owner.class.respond_to?(full_callback_name)
owner.class.send(full_callback_name)
else
[]
end
end
def include_in_memory?(record)