module-cluster 1.4.8 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. data/README.md +127 -337
  2. data/lib/module-cluster.rb +1 -153
  3. data/lib/module/cluster.rb +341 -0
  4. data/lib/module/cluster/class_support.rb +22 -0
  5. data/lib/module/cluster/cluster.rb +10 -0
  6. data/lib/module/cluster/cluster/cluster_interface.rb +550 -0
  7. data/lib/module/cluster/exception/module_not_in_stack.rb +26 -0
  8. data/lib/module/cluster/instance_controller.rb +14 -0
  9. data/lib/module/cluster/instance_controller/hook_controller.rb +33 -0
  10. data/lib/module/cluster/instance_controller/hook_controller/chain_proxy.rb +511 -0
  11. data/lib/module/cluster/instance_controller/hook_controller/hook_controller_interface.rb +830 -0
  12. data/lib/module/cluster/instance_controller/instance_controller_interface.rb +269 -0
  13. data/lib/module/cluster/instance_controller/multiple_hook_controller_proxy.rb +359 -0
  14. data/lib/module/cluster/instance_controller/multiple_hook_controller_proxy/chain_proxy.rb +442 -0
  15. data/lib/module/cluster/module_support.rb +67 -0
  16. data/lib/module/namespaces.rb +13 -0
  17. data/lib/module/requires.rb +32 -0
  18. data/spec/module/cluster/cluster_spec.rb +473 -0
  19. data/spec/module/cluster/instance_controller/hook_controller_spec.rb +922 -0
  20. data/spec/module/cluster/instance_controller/multiple_hook_controller_proxy_spec.rb +1240 -0
  21. data/spec/module/cluster_spec.rb +1794 -0
  22. metadata +27 -98
  23. data/README.rdoc +0 -395
  24. data/lib/module-cluster/ModuleCluster.rb +0 -9
  25. data/lib/module-cluster/ModuleCluster/Define.rb +0 -12
  26. data/lib/module-cluster/ModuleCluster/Define/Block.rb +0 -9
  27. data/lib/module-cluster/ModuleCluster/Define/Block/CascadingClass.rb +0 -83
  28. data/lib/module-cluster/ModuleCluster/Define/Block/CascadingClassOrModule.rb +0 -70
  29. data/lib/module-cluster/ModuleCluster/Define/Block/CascadingModule.rb +0 -79
  30. data/lib/module-cluster/ModuleCluster/Define/Block/CascadingModuleOrSubclass.rb +0 -21
  31. data/lib/module-cluster/ModuleCluster/Define/Block/Class.rb +0 -77
  32. data/lib/module-cluster/ModuleCluster/Define/Block/ClassOrInstance.rb +0 -78
  33. data/lib/module-cluster/ModuleCluster/Define/Block/ClassOrModule.rb +0 -78
  34. data/lib/module-cluster/ModuleCluster/Define/Block/ClassOrModuleOrInstance.rb +0 -78
  35. data/lib/module-cluster/ModuleCluster/Define/Block/ClassOrModuleOrSubclass.rb +0 -36
  36. data/lib/module-cluster/ModuleCluster/Define/Block/ClassOrSubclass.rb +0 -29
  37. data/lib/module-cluster/ModuleCluster/Define/Block/Instance.rb +0 -45
  38. data/lib/module-cluster/ModuleCluster/Define/Block/Module.rb +0 -77
  39. data/lib/module-cluster/ModuleCluster/Define/Block/ModuleOrInstance.rb +0 -78
  40. data/lib/module-cluster/ModuleCluster/Define/Block/ModuleOrSubclass.rb +0 -29
  41. data/lib/module-cluster/ModuleCluster/Define/Block/Subclass.rb +0 -56
  42. data/lib/module-cluster/ModuleCluster/Define/ClassCluster.rb +0 -193
  43. data/lib/module-cluster/ModuleCluster/Define/ClassOrInstanceCluster.rb +0 -128
  44. data/lib/module-cluster/ModuleCluster/Define/Cluster.rb +0 -181
  45. data/lib/module-cluster/ModuleCluster/Define/ClusterCascades.rb +0 -185
  46. data/lib/module-cluster/ModuleCluster/Define/ClusterCascadesToClass.rb +0 -181
  47. data/lib/module-cluster/ModuleCluster/Define/ClusterCascadesToModule.rb +0 -181
  48. data/lib/module-cluster/ModuleCluster/Define/Deprecated.rb +0 -40
  49. data/lib/module-cluster/ModuleCluster/Define/InstanceCluster.rb +0 -45
  50. data/lib/module-cluster/ModuleCluster/Define/ModuleCluster.rb +0 -193
  51. data/lib/module-cluster/ModuleCluster/Define/ModuleOrClassCluster.rb +0 -209
  52. data/lib/module-cluster/ModuleCluster/Define/ModuleOrInstanceCluster.rb +0 -128
  53. data/lib/module-cluster/ModuleCluster/Define/Status.rb +0 -106
  54. data/lib/module-cluster/ModuleCluster/Suspend.rb +0 -7
  55. data/lib/module-cluster/ModuleCluster/Suspend/Hooks.rb +0 -315
  56. data/lib/module-cluster/ModuleCluster/Suspend/WithoutHooks.rb +0 -153
  57. data/lib/module-cluster/_private_/ModuleCluster/CascadeFeatures.rb +0 -77
  58. data/lib/module-cluster/_private_/ModuleCluster/CascadeFeatures/ClusterStack.rb +0 -44
  59. data/lib/module-cluster/_private_/ModuleCluster/CascadeFeatures/PerformCascades.rb +0 -292
  60. data/lib/module-cluster/_private_/ModuleCluster/CascadeFeatures/Subclass.rb +0 -24
  61. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack.rb +0 -12
  62. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/Block.rb +0 -9
  63. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/Block/Class.rb +0 -36
  64. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/Block/Inherited.rb +0 -20
  65. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/Block/Instance.rb +0 -20
  66. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/Block/Module.rb +0 -36
  67. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/Block/Set.rb +0 -6
  68. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/Extends.rb +0 -140
  69. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/Includes.rb +0 -110
  70. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/PrependsExtends.rb +0 -140
  71. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/PrependsIncludes.rb +0 -110
  72. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/Set.rb +0 -35
  73. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/Set/MultiSetProxy.rb +0 -359
  74. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/Status.rb +0 -55
  75. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/Suspend.rb +0 -199
  76. data/lib/module-cluster/_private_/ModuleCluster/ExtendForCascade.rb +0 -34
  77. data/spec/ModuleCluster/Define/Block/CascadingClassOrModule_spec.rb +0 -285
  78. data/spec/ModuleCluster/Define/Block/CascadingClass_spec.rb +0 -254
  79. data/spec/ModuleCluster/Define/Block/CascadingModuleOrSubclass_spec.rb +0 -56
  80. data/spec/ModuleCluster/Define/Block/CascadingModule_spec.rb +0 -278
  81. data/spec/ModuleCluster/Define/Block/ClassOrInstance_spec.rb +0 -230
  82. data/spec/ModuleCluster/Define/Block/ClassOrModuleOrInstance_spec.rb +0 -238
  83. data/spec/ModuleCluster/Define/Block/ClassOrModuleOrSubclass_spec.rb +0 -54
  84. data/spec/ModuleCluster/Define/Block/ClassOrModule_spec.rb +0 -231
  85. data/spec/ModuleCluster/Define/Block/ClassOrSubclass_spec.rb +0 -54
  86. data/spec/ModuleCluster/Define/Block/Class_spec.rb +0 -224
  87. data/spec/ModuleCluster/Define/Block/Instance_spec.rb +0 -78
  88. data/spec/ModuleCluster/Define/Block/ModuleOrInstance_spec.rb +0 -54
  89. data/spec/ModuleCluster/Define/Block/ModuleOrSubclass_spec.rb +0 -51
  90. data/spec/ModuleCluster/Define/Block/Module_spec.rb +0 -230
  91. data/spec/ModuleCluster/Define/Block/Subclass_spec.rb +0 -73
  92. data/spec/ModuleCluster/Define/Block_spec.rb +0 -18
  93. data/spec/ModuleCluster/Define/ClassCluster_spec.rb +0 -728
  94. data/spec/ModuleCluster/Define/ClassOrInstanceCluster_spec.rb +0 -576
  95. data/spec/ModuleCluster/Define/ClusterCascadesToClass_spec.rb +0 -659
  96. data/spec/ModuleCluster/Define/ClusterCascadesToModule_spec.rb +0 -678
  97. data/spec/ModuleCluster/Define/ClusterCascades_spec.rb +0 -644
  98. data/spec/ModuleCluster/Define/Cluster_spec.rb +0 -708
  99. data/spec/ModuleCluster/Define/InstanceCluster_spec.rb +0 -102
  100. data/spec/ModuleCluster/Define/ModuleCluster_spec.rb +0 -728
  101. data/spec/ModuleCluster/Define/ModuleOrClassCluster_spec.rb +0 -728
  102. data/spec/ModuleCluster/Define/ModuleOrInstanceCluster_spec.rb +0 -576
  103. data/spec/ModuleCluster/Suspend/Hooks_spec.rb +0 -573
  104. data/spec/ModuleCluster/Suspend/WithoutHooks_spec.rb +0 -559
  105. data/spec/ModuleCluster_spec.rb +0 -15
  106. data/spec/_private_/ModuleCluster/CascadeFeatures/PerformCascades_spec.rb +0 -386
  107. data/spec/_private_/ModuleCluster/ClusterStack/Set/MultiSetProxy_spec.rb +0 -419
  108. data/spec/_private_/ModuleCluster/ClusterStack/Suspend_spec.rb +0 -242
@@ -0,0 +1,269 @@
1
+
2
+ ###
3
+ # @private
4
+ #
5
+ # Interface implementation for {::Module::Cluster::InstanceController Module::Cluster::InstanceController}.
6
+ # Implementation provided separately for ease of overloading.
7
+ #
8
+ module ::Module::Cluster::InstanceController::InstanceControllerInterface
9
+
10
+ ################
11
+ # initialize #
12
+ ################
13
+
14
+ ###
15
+ #
16
+ # @param instance Object instance for which Instance Controller is to operate.
17
+ #
18
+ def initialize( instance )
19
+
20
+ @instance = instance
21
+
22
+ end
23
+
24
+ #########################
25
+ # subclass_controller #
26
+ #########################
27
+
28
+ ###
29
+ # Returns subclass hook controller.
30
+ #
31
+ # @return [Module::Cluster::InstanceController::HookController] Subclass hook controller.
32
+ #
33
+ def subclass_controller
34
+
35
+ return @subclass_controller ||= self.class::HookController.new( :subclass, self )
36
+
37
+ end
38
+
39
+ ###############################
40
+ # before_include_controller #
41
+ ###############################
42
+
43
+ ###
44
+ # Returns before-include hook controller.
45
+ #
46
+ # @return [Module::Cluster::InstanceController::HookController] Before-include hook controller.
47
+ #
48
+ def before_include_controller
49
+
50
+ return @before_include_controller ||= self.class::HookController.new( :before_include, self )
51
+
52
+ end
53
+
54
+ ##############################
55
+ # before_extend_controller #
56
+ ##############################
57
+
58
+ ###
59
+ # Returns before-extend hook controller.
60
+ #
61
+ # @return [Module::Cluster::InstanceController::HookController] Before-extend hook controller.
62
+ #
63
+ def before_extend_controller
64
+
65
+ return @before_extend_controller ||= self.class::HookController.new( :before_extend, self )
66
+
67
+ end
68
+
69
+ #################################
70
+ # before_include_extend_proxy #
71
+ #################################
72
+
73
+ ###
74
+ # Returns a multi-controller proxy for before-include and before-extend hook controllers.
75
+ #
76
+ # @return [Module::Cluster::InstanceController::MultipleHookControllerProxy]
77
+ # Before-include-extend hook controller proxy.
78
+ #
79
+ def before_include_extend_proxy
80
+
81
+ return @before_include_extend_proxy ||= self.class::MultipleHookControllerProxy.new( :before_include_extend,
82
+ before_include_controller,
83
+ before_extend_controller )
84
+
85
+ end
86
+
87
+ ###################################
88
+ # before_include_subclass_proxy #
89
+ ###################################
90
+
91
+ ###
92
+ # Returns a multi-controller proxy for before-include and subclass hook controllers.
93
+ #
94
+ # @return [Module::Cluster::InstanceController::MultipleHookControllerProxy]
95
+ # Before-include-subclass hook controller proxy.
96
+ #
97
+ def before_include_subclass_proxy
98
+
99
+ return @before_include_subclass_proxy ||= self.class::MultipleHookControllerProxy.new( :before_include_subclass,
100
+ before_include_controller,
101
+ subclass_controller )
102
+
103
+ end
104
+
105
+ ##################################
106
+ # before_extend_subclass_proxy #
107
+ ##################################
108
+
109
+ ###
110
+ # Returns a multi-controller proxy for before-extend and subclass hook controllers.
111
+ #
112
+ # @return [Module::Cluster::InstanceController::MultipleHookControllerProxy]
113
+ # Before-extend-subclass hook controller proxy.
114
+ #
115
+ def before_extend_subclass_proxy
116
+
117
+ return @before_extend_subclass_proxy ||= self.class::MultipleHookControllerProxy.new( :before_extend_subclass,
118
+ before_include_controller,
119
+ subclass_controller )
120
+
121
+ end
122
+
123
+ ##########################################
124
+ # before_include_extend_subclass_proxy #
125
+ ##########################################
126
+
127
+ ###
128
+ # Returns a multi-controller proxy for before-include, before-extend, and subclass hook controllers.
129
+ #
130
+ # @return [Module::Cluster::InstanceController::MultipleHookControllerProxy]
131
+ # Before-include-extend-subclass hook controller proxy.
132
+ #
133
+ def before_include_extend_subclass_proxy
134
+
135
+ @before_include_extend_subclass_proxy ||= self.class::
136
+ MultipleHookControllerProxy.new( :before_include_extend_subclass,
137
+ before_include_controller,
138
+ before_extend_controller,
139
+ subclass_controller )
140
+ return @before_include_extend_subclass_proxy
141
+
142
+ end
143
+
144
+ ##############################
145
+ # after_include_controller #
146
+ ##############################
147
+
148
+ ###
149
+ # Returns after-include hook controller.
150
+ #
151
+ # @return [Module::Cluster::InstanceController::HookController] After-include hook controller.
152
+ #
153
+ def after_include_controller
154
+
155
+ return @after_include_controller ||= self.class::HookController.new( :after_include, self )
156
+
157
+ end
158
+
159
+ #############################
160
+ # after_extend_controller #
161
+ #############################
162
+
163
+ ###
164
+ # Returns after-extend hook controller.
165
+ #
166
+ # @return [Module::Cluster::InstanceController::HookController] After-extend hook controller.
167
+ #
168
+ def after_extend_controller
169
+
170
+ return @after_extend_controller ||= self.class::HookController.new( :after_extend, self )
171
+
172
+ end
173
+
174
+ ################################
175
+ # after_include_extend_proxy #
176
+ ################################
177
+
178
+ ###
179
+ # Returns a multi-controller proxy for after-include and after-extend hook controllers.
180
+ #
181
+ # @return [Module::Cluster::InstanceController::MultipleHookControllerProxy]
182
+ # After-include-extend hook controller proxy.
183
+ #
184
+ def after_include_extend_proxy
185
+
186
+ return @after_include_extend_proxy ||= self.class::MultipleHookControllerProxy.new( :after_include_extend,
187
+ after_include_controller,
188
+ after_extend_controller )
189
+
190
+ end
191
+
192
+ ##################################
193
+ # after_include_subclass_proxy #
194
+ ##################################
195
+
196
+ ###
197
+ # Returns a multi-controller proxy for after-include and subclass hook controllers.
198
+ #
199
+ # @return [Module::Cluster::InstanceController::MultipleHookControllerProxy]
200
+ # After-include-subclass hook controller proxy.
201
+ #
202
+ def after_include_subclass_proxy
203
+
204
+ return @after_include_subclass_proxy ||= self.class::MultipleHookControllerProxy.new( :after_include_subclass,
205
+ after_include_controller,
206
+ subclass_controller )
207
+
208
+ end
209
+
210
+ #################################
211
+ # after_extend_subclass_proxy #
212
+ #################################
213
+
214
+ ###
215
+ # Returns a multi-controller proxy for after-extend and subclass hook controllers.
216
+ #
217
+ # @return [Module::Cluster::InstanceController::MultipleHookControllerProxy]
218
+ # After-extend-subclass hook controller proxy.
219
+ #
220
+ def after_extend_subclass_proxy
221
+
222
+ return @after_extend_subclass_proxy ||= self.class::MultipleHookControllerProxy.new( :after_extend_subclass,
223
+ after_extend_controller,
224
+ subclass_controller )
225
+
226
+ end
227
+
228
+ #########################################
229
+ # after_include_extend_subclass_proxy #
230
+ #########################################
231
+
232
+ ###
233
+ # Returns a multi-controller proxy for after-include, after-extend, and subclass hook controllers.
234
+ #
235
+ # @return [Module::Cluster::InstanceController::MultipleHookControllerProxy]
236
+ # After-include-extend-subclass hook controller proxy.
237
+ #
238
+ def after_include_extend_subclass_proxy
239
+
240
+ @after_include_extend_subclass_proxy ||= self.class::
241
+ MultipleHookControllerProxy.new( :after_include_extend_subclass,
242
+ after_include_controller,
243
+ after_extend_controller,
244
+ subclass_controller )
245
+ return @after_include_extend_subclass_proxy
246
+
247
+ end
248
+
249
+ ######################################################################################################################
250
+ # private ##########################################################################################################
251
+ ######################################################################################################################
252
+
253
+ ###
254
+ # These methods are not actually in private space but are internal methods for inter-object
255
+ # communications. They aren't intended for public interfacing.
256
+ #
257
+
258
+ ##############
259
+ # instance #
260
+ ##############
261
+
262
+ ###
263
+ # Get reference to object instance for which Instance Controller (self) is operative.
264
+ #
265
+ # @!attribute [reader] Object instance for which this Instance Controller operates.
266
+ #
267
+ attr_reader :instance
268
+
269
+ end
@@ -0,0 +1,359 @@
1
+
2
+ ###
3
+ # Proxies before include or extend definitions to both include and extend controllers.
4
+ #
5
+ class ::Module::Cluster::InstanceController::MultipleHookControllerProxy
6
+
7
+ ################
8
+ # initialize #
9
+ ################
10
+
11
+ ###
12
+ # @private
13
+ #
14
+ # @param name Name of this Multiple Hook Controller Proxy.
15
+ #
16
+ # @param hook_controllers Hook Controllers for which this Proxy is operative.
17
+ #
18
+ def initialize( name, *hook_controllers )
19
+
20
+ @name = name
21
+
22
+ @hook_controllers = hook_controllers
23
+
24
+ end
25
+
26
+ #############
27
+ # include #
28
+ #############
29
+
30
+ ###
31
+ # Declare that modules should be included at event hook.
32
+ #
33
+ # @overload include( module, ..., & block )
34
+ #
35
+ # @param module Module to include at event hook.
36
+ #
37
+ # @yield [hooked_instance] Block for event hook action.
38
+ # @yieldparam hooked_instance Instance for which event hook is occurring.
39
+ # Equivalent to parameter for #included and #extended.
40
+ #
41
+ # @return [Module::Cluster::InstanceController::HookController] self
42
+ #
43
+ def include( *modules )
44
+
45
+ @hook_controllers.each do |this_hook_controller|
46
+ this_hook_controller.include( *modules )
47
+ end
48
+
49
+ return self
50
+
51
+ end
52
+
53
+ ############
54
+ # extend #
55
+ ############
56
+
57
+ ###
58
+ # Declare that modules should be extended at event hook.
59
+ #
60
+ # @overload extend( module, ..., & block )
61
+ #
62
+ # @param module Module to extend at event hook.
63
+ #
64
+ # @yield [hooked_instance] Block for event hook action.
65
+ # @yieldparam hooked_instance Instance for which event hook is occurring.
66
+ # Equivalent to parameter for #included and #extended.
67
+ #
68
+ # @return [Module::Cluster::InstanceController::HookController] self
69
+ #
70
+ def extend( *modules )
71
+
72
+ @hook_controllers.each do |this_hook_controller|
73
+ this_hook_controller.extend( *modules )
74
+ end
75
+
76
+ return self
77
+
78
+ end
79
+
80
+ ########################
81
+ # include_and_extend #
82
+ ########################
83
+
84
+ ###
85
+ # Declare that modules should be included and extended at event hook. See also #extend_and_include.
86
+ #
87
+ # @overload include_and_extend( module, ..., & block )
88
+ #
89
+ # @param module Module to include and extend at event hook.
90
+ #
91
+ # @yield [hooked_instance] Block for event hook action.
92
+ # @yieldparam hooked_instance Instance for which event hook is occurring.
93
+ # Equivalent to parameter for #included and #extended.
94
+ #
95
+ # @return [Module::Cluster::InstanceController::HookController] self
96
+ #
97
+ def include_and_extend( *modules )
98
+
99
+ @hook_controllers.each do |this_hook_controller|
100
+ this_hook_controller.include_and_extend( *modules )
101
+ end
102
+
103
+ return self
104
+
105
+ end
106
+
107
+ ########################
108
+ # extend_and_include #
109
+ ########################
110
+
111
+ ###
112
+ # Declare that modules should be extended and included at event hook. Order is reversed from #include_and_extend.
113
+ #
114
+ # @overload extend_and_include( module, ..., & block )
115
+ #
116
+ # @param module Module to extend and include at event hook.
117
+ #
118
+ # @yield [hooked_instance] Block for event hook action.
119
+ # @yieldparam hooked_instance Instance for which event hook is occurring.
120
+ # Equivalent to parameter for #included and #extended.
121
+ #
122
+ # @return [Module::Cluster::InstanceController::HookController] self
123
+ #
124
+ def extend_and_include( *modules )
125
+
126
+ @hook_controllers.each do |this_hook_controller|
127
+ this_hook_controller.extend_and_include( *modules )
128
+ end
129
+
130
+ return self
131
+
132
+ end
133
+
134
+ ############
135
+ # action #
136
+ ############
137
+
138
+ ###
139
+ # Declare that action should be performed at event hook.
140
+ #
141
+ # @yield [hooked_instance] Block for event hook action.
142
+ # @yieldparam hooked_instance Instance for which event hook is occurring.
143
+ # Equivalent to parameter for #included and #extended.
144
+ #
145
+ # @return [Module::Cluster::InstanceController::HookController] self
146
+ #
147
+ def action( & block )
148
+
149
+ @hook_controllers.each do |this_hook_controller|
150
+ this_hook_controller.action( & block )
151
+ end
152
+
153
+ return self
154
+
155
+ end
156
+
157
+ ###################
158
+ # before_extend #
159
+ ###################
160
+
161
+ ###
162
+ # Declare that chained actions should be inserted into the event stack prior to the location
163
+ # in the same event stack where provided module(s) are specified to be extended.
164
+ #
165
+ # @overload before_extend( module, ..., & block )
166
+ #
167
+ # @param module Module that insert should be prior to.
168
+ #
169
+ # @yield [hooked_instance] Block for event hook action.
170
+ # @yieldparam hooked_instance Instance for which event hook is occurring.
171
+ # Equivalent to parameter for #included and #extended.
172
+ #
173
+ # @return [Module::Cluster::InstanceController::HookController::ChainProxy] Chain Proxy for chained declarations.
174
+ #
175
+ def before_extend( *modules )
176
+
177
+ return chain_proxy.before_extend( *modules )
178
+
179
+ end
180
+
181
+ ####################
182
+ # before_include #
183
+ ####################
184
+
185
+ ###
186
+ # Declare that chained actions should be inserted into the event stack prior to the location
187
+ # in the same event stack where provided module(s) are specified to be included.
188
+ #
189
+ # @overload before_include( module, ..., & block )
190
+ #
191
+ # @param module Module that insert should be prior to.
192
+ #
193
+ # @yield [hooked_instance] Block for event hook action.
194
+ # @yieldparam hooked_instance Instance for which event hook is occurring.
195
+ # Equivalent to parameter for #included and #extended.
196
+ #
197
+ # @return [Module::Cluster::InstanceController::HookController::ChainProxy] Chain Proxy for chained declarations.
198
+ #
199
+ def before_include( *modules )
200
+
201
+ return chain_proxy.before_include( *modules )
202
+
203
+ end
204
+
205
+ ##############################
206
+ # before_include_or_extend #
207
+ # before_extend_or_include #
208
+ ##############################
209
+
210
+ ###
211
+ # Declare that chained actions should be inserted into the event stack prior to the location
212
+ # in the same event stack where provided module(s) are specified to be included or extended.
213
+ #
214
+ # @overload before_include_or_extend( module, ..., & block )
215
+ #
216
+ # @param module Module that insert should be prior to.
217
+ #
218
+ # @yield [hooked_instance] Block for event hook action.
219
+ # @yieldparam hooked_instance Instance for which event hook is occurring.
220
+ # Equivalent to parameter for #included and #extended.
221
+ #
222
+ # @return [Module::Cluster::InstanceController::HookController::ChainProxy] Chain Proxy for chained declarations.
223
+ #
224
+ def before_include_or_extend( *modules )
225
+
226
+ return chain_proxy.before_include_or_extend( *modules )
227
+
228
+ end
229
+
230
+ alias_method :before_extend_or_include, :before_include_or_extend
231
+
232
+ ###################
233
+ # after_include #
234
+ ###################
235
+
236
+ ###
237
+ # Declare that chained actions should be inserted into the event stack after the location
238
+ # in the same event stack where provided module(s) are specified to be included.
239
+ #
240
+ # @overload before_include( module, ..., & block )
241
+ #
242
+ # @param module Module that insert should be after.
243
+ #
244
+ # @yield [hooked_instance] Block for event hook action.
245
+ # @yieldparam hooked_instance Instance for which event hook is occurring.
246
+ # Equivalent to parameter for #included and #extended.
247
+ #
248
+ # @return [Module::Cluster::InstanceController::HookController::ChainProxy] Chain Proxy for chained declarations.
249
+ #
250
+ def after_include( *modules )
251
+
252
+ return chain_proxy.after_include( *modules )
253
+
254
+ end
255
+
256
+ ##################
257
+ # after_extend #
258
+ ##################
259
+
260
+ ###
261
+ # Declare that chained actions should be inserted into the event stack after the location
262
+ # in the same event stack where provided module(s) are specified to be extended.
263
+ #
264
+ # @overload before_extend( module, ..., & block )
265
+ #
266
+ # @param module Module that insert should be after.
267
+ #
268
+ # @yield [hooked_instance] Block for event hook action.
269
+ # @yieldparam hooked_instance Instance for which event hook is occurring.
270
+ # Equivalent to parameter for #included and #extended.
271
+ #
272
+ # @return [Module::Cluster::InstanceController::HookController::ChainProxy] Chain Proxy for chained declarations.
273
+ #
274
+ def after_extend( *modules )
275
+
276
+ return chain_proxy.after_extend( *modules )
277
+
278
+ end
279
+
280
+ #############################
281
+ # after_include_or_extend #
282
+ # after_extend_or_include #
283
+ #############################
284
+
285
+ ###
286
+ # Declare that chained actions should be inserted into the event stack after the location
287
+ # in the same event stack where provided module(s) are specified to be included or extended.
288
+ #
289
+ # @overload before_include_or_extend( module, ..., & block )
290
+ #
291
+ # @param module Module that insert should be after.
292
+ #
293
+ # @yield [hooked_instance] Block for event hook action.
294
+ # @yieldparam hooked_instance Instance for which event hook is occurring.
295
+ # Equivalent to parameter for #included and #extended.
296
+ #
297
+ # @return [Module::Cluster::InstanceController::HookController::ChainProxy] Chain Proxy for chained declarations.
298
+ #
299
+ def after_include_or_extend( *modules )
300
+
301
+ return chain_proxy.after_include_or_extend( *modules )
302
+
303
+ end
304
+
305
+ alias_method :after_extend_or_include, :after_include_or_extend
306
+
307
+ ######################################################################################################################
308
+ # private ##########################################################################################################
309
+ ######################################################################################################################
310
+
311
+ ###
312
+ # These methods are not actually in private space but are internal methods for inter-object
313
+ # communications. They aren't intended for public interfacing.
314
+ #
315
+
316
+ #################
317
+ # chain_proxy #
318
+ #################
319
+
320
+ ###
321
+ # @private
322
+ #
323
+ # Get Chain Proxy instance used by this Multiple Hook Controller Proxy.
324
+ #
325
+ # @return [Module::Cluster::InstanceController::MultipleHookControllerProxy::ChainProxy] Chain Proxy instance.
326
+ #
327
+ def chain_proxy
328
+
329
+ return @chain_proxy ||= self.class::ChainProxy.new( self )
330
+
331
+ end
332
+
333
+ ##########
334
+ # name #
335
+ ##########
336
+
337
+ ###
338
+ # @private
339
+ #
340
+ # Name of hook controller.
341
+ #
342
+ # @return [Symbol,String] Name.
343
+ #
344
+ attr_reader :name
345
+
346
+ ######################
347
+ # hook_controllers #
348
+ ######################
349
+
350
+ ###
351
+ # @private
352
+ #
353
+ # @!attribute [reader] Hook Controllers this Proxy proxies.
354
+ #
355
+ # @return [Array<Module::Cluster::InstanceController::HookController>] Hook Controllers this Proxy proxies.
356
+ #
357
+ attr_reader :hook_controllers
358
+
359
+ end