mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Give GeneratedAttributeMethods module a name
Currently GeneratedAttributeMethods is a module builder class, an instance of which is included in every AR class. OTOH, GeneratedAssociatedMethods is assigned to a constant under the model namespace. This is inconsistent and looks strange in the list of ancestors. There is no particular reason *not* to assign a constant for this (very important) module under the model namespace, so that's what this commit does. Previous to this change, ancestors for an AR class looked like this: ``` => [User (call 'User.connection' to establish a connection), User::GeneratedAssociationMethods, #<ActiveRecord::AttributeMethods::GeneratedAttributeMethods:0x000055ace0f05b08>, ApplicationRecord(abstract), ApplicationRecord::GeneratedAssociationMethods, #<ActiveRecord::AttributeMethods::GeneratedAttributeMethods:0x000055ace093c460>, ActiveRecord::Base, ... ``` With this change, they look like this: ``` => [User (call 'User.connection' to establish a connection), User::GeneratedAssociationMethods, User::GeneratedAttributeMethods, ApplicationRecord(abstract), ApplicationRecord::GeneratedAssociationMethods, ApplicationRecord::GeneratedAttributeMethods, ActiveRecord::Base, ... ``` The previously named `GeneratedAttributeMethods` module builder class is renamed `GeneratedAttributeMethodsBuilder` to emphasize that this is not a module but a class.
This commit is contained in:
parent
963ec3bae5
commit
8ca3c286a7
2 changed files with 5 additions and 4 deletions
|
@ -24,7 +24,7 @@ module ActiveRecord
|
||||||
|
|
||||||
RESTRICTED_CLASS_METHODS = %w(private public protected allocate new name parent superclass)
|
RESTRICTED_CLASS_METHODS = %w(private public protected allocate new name parent superclass)
|
||||||
|
|
||||||
class GeneratedAttributeMethods < Module #:nodoc:
|
class GeneratedAttributeMethodsBuilder < Module #:nodoc:
|
||||||
include Mutex_m
|
include Mutex_m
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -35,7 +35,8 @@ module ActiveRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize_generated_modules # :nodoc:
|
def initialize_generated_modules # :nodoc:
|
||||||
@generated_attribute_methods = GeneratedAttributeMethods.new
|
@generated_attribute_methods = const_set(:GeneratedAttributeMethods, GeneratedAttributeMethodsBuilder.new)
|
||||||
|
private_constant :GeneratedAttributeMethods
|
||||||
@attribute_methods_generated = false
|
@attribute_methods_generated = false
|
||||||
include @generated_attribute_methods
|
include @generated_attribute_methods
|
||||||
|
|
||||||
|
@ -88,7 +89,7 @@ module ActiveRecord
|
||||||
# If ThisClass < ... < SomeSuperClass < ... < Base and SomeSuperClass
|
# If ThisClass < ... < SomeSuperClass < ... < Base and SomeSuperClass
|
||||||
# defines its own attribute method, then we don't want to overwrite that.
|
# defines its own attribute method, then we don't want to overwrite that.
|
||||||
defined = method_defined_within?(method_name, superclass, Base) &&
|
defined = method_defined_within?(method_name, superclass, Base) &&
|
||||||
! superclass.instance_method(method_name).owner.is_a?(GeneratedAttributeMethods)
|
! superclass.instance_method(method_name).owner.is_a?(GeneratedAttributeMethodsBuilder)
|
||||||
defined || super
|
defined || super
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1083,7 +1083,7 @@ class AttributeMethodsTest < ActiveRecord::TestCase
|
||||||
|
|
||||||
test "generated attribute methods ancestors have correct class" do
|
test "generated attribute methods ancestors have correct class" do
|
||||||
mod = Topic.send(:generated_attribute_methods)
|
mod = Topic.send(:generated_attribute_methods)
|
||||||
assert_match %r(GeneratedAttributeMethods), mod.inspect
|
assert_match %r(Topic::GeneratedAttributeMethods), mod.inspect
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
Loading…
Reference in a new issue