11# rubocop:todo all
22module InterceptableSpec
33 class CallbackRegistry
4- def initialize
4+ def initialize ( only : [ ] )
55 @calls = [ ]
6+ @only = only
67 end
78
89 def record_call ( cls , cb )
10+ return unless @only . empty? || @only . any? { |pat | pat == cb }
911 @calls << [ cls , cb ]
1012 end
1113
@@ -16,6 +18,8 @@ module CallbackTracking
1618 extend ActiveSupport ::Concern
1719
1820 included do
21+ field :name , type : String
22+
1923 %i(
2024 validation save create update
2125 ) . each do |what |
@@ -35,199 +39,110 @@ module CallbackTracking
3539 end
3640 end
3741 end
38- end
39-
40- class CbHasOneParent
41- include Mongoid ::Document
4242
43- has_one :child , autosave : true , class_name : "CbHasOneChild" , inverse_of : :parent
43+ attr_accessor :callback_registry
4444
45- def initialize ( callback_registry )
45+ def initialize ( callback_registry , * args , ** kwargs )
4646 @callback_registry = callback_registry
47- super ( )
47+ super ( * args , ** kwargs )
4848 end
49+ end
4950
50- attr_accessor :callback_registry
51-
51+ module RootInsertable
5252 def insert_as_root
5353 @callback_registry &.record_call ( self . class , :insert_into_database )
5454 super
5555 end
56+ end
5657
58+ class CbHasOneParent
59+ include Mongoid ::Document
5760 include CallbackTracking
61+ include RootInsertable
62+
63+ has_one :child , autosave : true , class_name : "CbHasOneChild" , inverse_of : :parent
5864 end
5965
6066 class CbHasOneChild
6167 include Mongoid ::Document
68+ include CallbackTracking
6269
6370 belongs_to :parent , class_name : "CbHasOneParent" , inverse_of : :child
64-
65- def initialize ( callback_registry )
66- @callback_registry = callback_registry
67- super ( )
68- end
69-
70- attr_accessor :callback_registry
71-
72- include CallbackTracking
7371 end
7472
7573 class CbHasManyParent
7674 include Mongoid ::Document
75+ include CallbackTracking
76+ include RootInsertable
7777
7878 has_many :children , autosave : true , class_name : "CbHasManyChild" , inverse_of : :parent
79-
80- def initialize ( callback_registry )
81- @callback_registry = callback_registry
82- super ( )
83- end
84-
85- attr_accessor :callback_registry
86-
87- def insert_as_root
88- @callback_registry &.record_call ( self . class , :insert_into_database )
89- super
90- end
91-
92- include CallbackTracking
9379 end
9480
9581 class CbHasManyChild
9682 include Mongoid ::Document
83+ include CallbackTracking
9784
9885 belongs_to :parent , class_name : "CbHasManyParent" , inverse_of : :children
99-
100- def initialize ( callback_registry )
101- @callback_registry = callback_registry
102- super ( )
103- end
104-
105- attr_accessor :callback_registry
106-
107- include CallbackTracking
10886 end
10987
11088 class CbEmbedsOneParent
11189 include Mongoid ::Document
90+ include CallbackTracking
91+ include RootInsertable
11292
11393 field :name
11494
11595 embeds_one :child , cascade_callbacks : true , class_name : "CbEmbedsOneChild" , inverse_of : :parent
116-
117- def initialize ( callback_registry )
118- @callback_registry = callback_registry
119- super ( )
120- end
121-
122- attr_accessor :callback_registry
123-
124- def insert_as_root
125- @callback_registry &.record_call ( self . class , :insert_into_database )
126- super
127- end
128-
129- include CallbackTracking
13096 end
13197
13298 class CbEmbedsOneChild
13399 include Mongoid ::Document
100+ include CallbackTracking
134101
135102 field :age
136103
137104 embedded_in :parent , class_name : "CbEmbedsOneParent" , inverse_of : :child
138-
139- def initialize ( callback_registry )
140- @callback_registry = callback_registry
141- super ( )
142- end
143-
144- attr_accessor :callback_registry
145-
146- include CallbackTracking
147105 end
148106
149107 class CbEmbedsManyParent
150108 include Mongoid ::Document
109+ include CallbackTracking
110+ include RootInsertable
151111
152112 embeds_many :children , cascade_callbacks : true , class_name : "CbEmbedsManyChild" , inverse_of : :parent
153-
154- def initialize ( callback_registry )
155- @callback_registry = callback_registry
156- super ( )
157- end
158-
159- attr_accessor :callback_registry
160-
161- def insert_as_root
162- @callback_registry &.record_call ( self . class , :insert_into_database )
163- super
164- end
165-
166- include CallbackTracking
167113 end
168114
169115 class CbEmbedsManyChild
170116 include Mongoid ::Document
117+ include CallbackTracking
171118
172119 embedded_in :parent , class_name : "CbEmbedsManyParent" , inverse_of : :children
173-
174- def initialize ( callback_registry )
175- @callback_registry = callback_registry
176- super ( )
177- end
178-
179- attr_accessor :callback_registry
180-
181- include CallbackTracking
182120 end
183121
184122 class CbParent
185123 include Mongoid ::Document
186-
187- def initialize ( callback_registry )
188- @callback_registry = callback_registry
189- super ( )
190- end
191-
192- attr_accessor :callback_registry
124+ include CallbackTracking
193125
194126 embeds_many :cb_children
195127 embeds_many :cb_cascaded_children , cascade_callbacks : true
196-
197- include CallbackTracking
128+ embeds_many :cb_cascaded_nodes , cascade_callbacks : true , as : :parent
198129 end
199130
200131 class CbChild
201132 include Mongoid ::Document
133+ include CallbackTracking
202134
203135 embedded_in :cb_parent
204-
205- def initialize ( callback_registry , options )
206- @callback_registry = callback_registry
207- super ( options )
208- end
209-
210- attr_accessor :callback_registry
211-
212- include CallbackTracking
213136 end
214137
215138 class CbCascadedChild
216139 include Mongoid ::Document
140+ include CallbackTracking
217141
218142 embedded_in :cb_parent
219143
220- def initialize ( callback_registry , options )
221- @callback_registry = callback_registry
222- super ( options )
223- end
224-
225- attr_accessor :callback_registry
226-
227144 before_save :test_mongoid_state
228145
229- include CallbackTracking
230-
231146 private
232147
233148 # Helps test that cascading child callbacks have access to the Mongoid
@@ -238,6 +153,15 @@ def test_mongoid_state
238153 Mongoid ::Threaded . stack ( 'interceptable' ) . push ( self )
239154 end
240155 end
156+
157+ class CbCascadedNode
158+ include Mongoid ::Document
159+ include CallbackTracking
160+
161+ embedded_in :parent , polymorphic : true
162+
163+ embeds_many :cb_cascaded_nodes , cascade_callbacks : true , as : :parent
164+ end
241165end
242166
243167class InterceptableBand
0 commit comments