@@ -8,6 +8,29 @@ module Mongoid
8
8
# around traversing the document graph.
9
9
module Traversable
10
10
extend ActiveSupport ::Concern
11
+ # This code is extracted from ActiveSupport so that we do not depend on
12
+ # their private API that may change at any time.
13
+ # This code should be reviewed and maybe removed when implementing
14
+ # https://jira.mongodb.org/browse/MONGOID-5832
15
+ class << self
16
+ # @api private
17
+ def __redefine ( owner , name , value )
18
+ if owner . singleton_class?
19
+ owner . redefine_method ( name ) { value }
20
+ owner . send ( :public , name )
21
+ end
22
+ owner . redefine_singleton_method ( name ) { value }
23
+ owner . singleton_class . send ( :public , name )
24
+ owner . redefine_singleton_method ( "#{ name } =" ) do |new_value |
25
+ if owner . equal? ( self )
26
+ value = new_value
27
+ else
28
+ ::Mongoid ::Traversable . redefine ( self , name , new_value )
29
+ end
30
+ end
31
+ owner . singleton_class . send ( :public , "#{ name } =" )
32
+ end
33
+ end
11
34
12
35
# Class-level methods for the Traversable behavior.
13
36
module ClassMethods
@@ -105,11 +128,7 @@ def discriminator_key=(value)
105
128
if value
106
129
Mongoid ::Fields ::Validators ::Macro . validate_field_name ( self , value )
107
130
value = value . to_s
108
- if defined? ( ::ActiveSupport ::ClassAttribute )
109
- ::ActiveSupport ::ClassAttribute . redefine ( self , 'discriminator_key' , value )
110
- else
111
- super
112
- end
131
+ ::Mongoid ::Traversable . __redefine ( self , 'discriminator_key' , value )
113
132
else
114
133
# When discriminator key is set to nil, replace the class's definition
115
134
# of the discriminator key reader (provided by class_attribute earlier)
0 commit comments