diff --git a/activerecord/lib/active_record/associations/builder/association.rb b/activerecord/lib/active_record/associations/builder/association.rb index 37ba1c73b164eff4a452405603689ae88390a39b..f86d9755921764c434a43750e43f8d48b83b59c0 100644 --- a/activerecord/lib/active_record/associations/builder/association.rb +++ b/activerecord/lib/active_record/associations/builder/association.rb @@ -1,3 +1,5 @@ +require 'active_support/core_ext/module/attribute_accessors' + # This is the parent Association class which defines the variables # used by all associations. # @@ -16,7 +18,10 @@ class << self end self.extensions = [] - VALID_OPTIONS = [:class_name, :class, :foreign_key, :validate] + # TODO: This class accessor is needed to make activerecord-deprecated_finders work. + # We can move it to a constant in 5.0. + cattr_accessor :valid_options, instance_accessor: false + self.valid_options = [:class_name, :class, :foreign_key, :validate] def self.build(model, name, scope, options, &block) extension = define_extensions model, name, &block @@ -63,12 +68,12 @@ def self.macro raise NotImplementedError end - def self.valid_options(options) - VALID_OPTIONS + Association.extensions.flat_map(&:valid_options) + def self.build_valid_options(options) + self.valid_options + Association.extensions.flat_map(&:valid_options) end def self.validate_options(options) - options.assert_valid_keys(valid_options(options)) + options.assert_valid_keys(build_valid_options(options)) end def self.define_extensions(model, name) diff --git a/activerecord/lib/active_record/associations/builder/belongs_to.rb b/activerecord/lib/active_record/associations/builder/belongs_to.rb index e8e36e7cd0433c8aa614dd811a27331599af2830..7dd8a7deb12cbfe133b13dc31447e6e9d3f0fda6 100644 --- a/activerecord/lib/active_record/associations/builder/belongs_to.rb +++ b/activerecord/lib/active_record/associations/builder/belongs_to.rb @@ -4,7 +4,7 @@ def self.macro :belongs_to end - def self.valid_options(options) + def self.build_valid_options(options) super + [:foreign_type, :polymorphic, :touch, :counter_cache] end diff --git a/activerecord/lib/active_record/associations/builder/collection_association.rb b/activerecord/lib/active_record/associations/builder/collection_association.rb index 2ff67f904d01748e07355447170dc9bf4eb2917a..b69691488320dfd42b14eceff622a984e838d868 100644 --- a/activerecord/lib/active_record/associations/builder/collection_association.rb +++ b/activerecord/lib/active_record/associations/builder/collection_association.rb @@ -7,7 +7,7 @@ class CollectionAssociation < Association #:nodoc: CALLBACKS = [:before_add, :after_add, :before_remove, :after_remove] - def self.valid_options(options) + def self.build_valid_options(options) super + [:table_name, :before_add, :after_add, :before_remove, :after_remove, :extend] end diff --git a/activerecord/lib/active_record/associations/builder/has_many.rb b/activerecord/lib/active_record/associations/builder/has_many.rb index 227184cd190997fdc77ca026c102f88779f1d1d3..4ec808bc77a1e13a589e5dca2f189bf955c60f24 100644 --- a/activerecord/lib/active_record/associations/builder/has_many.rb +++ b/activerecord/lib/active_record/associations/builder/has_many.rb @@ -4,7 +4,7 @@ def self.macro :has_many end - def self.valid_options(options) + def self.build_valid_options(options) super + [:primary_key, :dependent, :as, :through, :source, :source_type, :inverse_of, :counter_cache] end diff --git a/activerecord/lib/active_record/associations/builder/has_one.rb b/activerecord/lib/active_record/associations/builder/has_one.rb index 064a3c8b51ff840db8d5dfbc7d7bca0a7bf72c23..216d6abec14fe00120b87dcea5089c4200e512c7 100644 --- a/activerecord/lib/active_record/associations/builder/has_one.rb +++ b/activerecord/lib/active_record/associations/builder/has_one.rb @@ -4,7 +4,7 @@ def self.macro :has_one end - def self.valid_options(options) + def self.build_valid_options(options) valid = super + [:order, :as] valid += [:through, :source, :source_type] if options[:through] valid diff --git a/activerecord/lib/active_record/associations/builder/singular_association.rb b/activerecord/lib/active_record/associations/builder/singular_association.rb index a6e83006422a8225a07d76eb67f19533af4c41fd..6a1a0073e60d3dfb3e16e79b6328d4a2703b3ddf 100644 --- a/activerecord/lib/active_record/associations/builder/singular_association.rb +++ b/activerecord/lib/active_record/associations/builder/singular_association.rb @@ -2,7 +2,7 @@ module ActiveRecord::Associations::Builder class SingularAssociation < Association #:nodoc: - def self.valid_options(options) + def self.build_valid_options(options) super + [:remote, :dependent, :primary_key, :inverse_of] end