module-cluster 1.4.0 → 1.4.1

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 (50) hide show
  1. data/README.md +66 -29
  2. data/README.rdoc +66 -29
  3. data/lib/module-cluster.rb +18 -0
  4. data/lib/module-cluster/ModuleCluster.rb +2 -7
  5. data/lib/module-cluster/ModuleCluster/Define/Block.rb +4 -4
  6. data/lib/module-cluster/ModuleCluster/Define/Block/Class.rb +11 -8
  7. data/lib/module-cluster/ModuleCluster/Define/Block/ClassOrInstance.rb +19 -12
  8. data/lib/module-cluster/ModuleCluster/Define/Block/ClassOrModule.rb +19 -12
  9. data/lib/module-cluster/ModuleCluster/Define/Block/ClassOrModuleOrInstance.rb +19 -12
  10. data/lib/module-cluster/ModuleCluster/Define/Block/Instance.rb +3 -2
  11. data/lib/module-cluster/ModuleCluster/Define/Block/Module.rb +11 -8
  12. data/lib/module-cluster/ModuleCluster/Define/Block/ModuleOrInstance.rb +19 -12
  13. data/lib/module-cluster/ModuleCluster/Define/ClassCluster.rb +39 -46
  14. data/lib/module-cluster/ModuleCluster/Define/ClassOrInstanceCluster.rb +34 -33
  15. data/lib/module-cluster/ModuleCluster/Define/Cluster.rb +31 -42
  16. data/lib/module-cluster/ModuleCluster/Define/ClusterCascades.rb +53 -62
  17. data/lib/module-cluster/ModuleCluster/Define/ClusterCascadesToClass.rb +49 -60
  18. data/lib/module-cluster/ModuleCluster/Define/ClusterCascadesToModule.rb +49 -60
  19. data/lib/module-cluster/ModuleCluster/Define/InstanceCluster.rb +3 -4
  20. data/lib/module-cluster/ModuleCluster/Define/ModuleCluster.rb +39 -46
  21. data/lib/module-cluster/ModuleCluster/Define/ModuleOrClassCluster.rb +55 -54
  22. data/lib/module-cluster/ModuleCluster/Define/ModuleOrInstanceCluster.rb +34 -33
  23. data/lib/module-cluster/_private_/ModuleCluster/CascadeFeatures.rb +4 -4
  24. data/lib/module-cluster/_private_/ModuleCluster/CascadeFeatures/ClusterStack.rb +1 -1
  25. data/lib/module-cluster/_private_/ModuleCluster/CascadeFeatures/PerformCascades.rb +64 -46
  26. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack.rb +7 -5
  27. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/Block.rb +3 -3
  28. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/Block/Class.rb +2 -2
  29. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/Block/Instance.rb +1 -1
  30. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/Block/Module.rb +2 -2
  31. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/Block/Set.rb +4 -1
  32. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/Extends.rb +45 -13
  33. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/Includes.rb +36 -10
  34. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/PrependsExtends.rb +47 -15
  35. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/PrependsIncludes.rb +38 -12
  36. data/lib/module-cluster/_private_/ModuleCluster/ClusterStack/Set.rb +29 -1
  37. data/lib/module-cluster/_private_/ModuleCluster/ExtendForCascade.rb +8 -3
  38. data/spec/ModuleCluster/Define/ClassCluster_spec.rb +18 -18
  39. data/spec/ModuleCluster/Define/ClassOrInstanceCluster_spec.rb +10 -10
  40. data/spec/ModuleCluster/Define/ClusterCascadesToClass_spec.rb +18 -18
  41. data/spec/ModuleCluster/Define/ClusterCascadesToModule_spec.rb +18 -18
  42. data/spec/ModuleCluster/Define/ClusterCascades_spec.rb +18 -18
  43. data/spec/ModuleCluster/Define/Cluster_spec.rb +18 -18
  44. data/spec/ModuleCluster/Define/InstanceCluster_spec.rb +2 -2
  45. data/spec/ModuleCluster/Define/ModuleCluster_spec.rb +18 -18
  46. data/spec/ModuleCluster/Define/ModuleOrClassCluster_spec.rb +18 -18
  47. data/spec/ModuleCluster/Define/ModuleOrInstanceCluster_spec.rb +10 -10
  48. data/spec/ModuleCluster_spec.rb +5 -5
  49. data/spec/_private_/ModuleCluster/CascadeFeatures/PerformCascades_spec.rb +110 -2
  50. metadata +2 -2
@@ -9,7 +9,7 @@ module ModuleCluster::CascadeFeatures
9
9
 
10
10
  def append_features( hooked_instance )
11
11
 
12
- ModuleCluster::CascadeFeatures.cascade_features( self, hooked_instance, cluster_stack.prepending_include_hooks )
12
+ ModuleCluster::CascadeFeatures.perform_cascades( self, :prepend_include, hooked_instance, cluster_stack.prepend_include_hooks )
13
13
 
14
14
  super
15
15
 
@@ -23,7 +23,7 @@ module ModuleCluster::CascadeFeatures
23
23
 
24
24
  super
25
25
 
26
- ModuleCluster::CascadeFeatures.cascade_features( self, hooked_instance, cluster_stack.include_hooks )
26
+ ModuleCluster::CascadeFeatures.perform_cascades( self, :include, hooked_instance, cluster_stack.include_hooks )
27
27
 
28
28
  end
29
29
 
@@ -33,7 +33,7 @@ module ModuleCluster::CascadeFeatures
33
33
 
34
34
  def extend_object( hooked_instance )
35
35
 
36
- ModuleCluster::CascadeFeatures.cascade_features( self, hooked_instance, cluster_stack.prepending_extend_hooks )
36
+ ModuleCluster::CascadeFeatures.perform_cascades( self, :prepend_extend, hooked_instance, cluster_stack.prepend_extend_hooks )
37
37
 
38
38
  super
39
39
 
@@ -47,7 +47,7 @@ module ModuleCluster::CascadeFeatures
47
47
 
48
48
  super
49
49
 
50
- ModuleCluster::CascadeFeatures.cascade_features( self, hooked_instance, cluster_stack.extend_hooks )
50
+ ModuleCluster::CascadeFeatures.perform_cascades( self, :extend, hooked_instance, cluster_stack.extend_hooks )
51
51
 
52
52
  end
53
53
 
@@ -1,6 +1,6 @@
1
1
 
2
2
  module ModuleCluster::CascadeFeatures::ClusterStack
3
-
3
+
4
4
  #########################
5
5
  # self.cluster_stacks #
6
6
  #########################
@@ -2,66 +2,73 @@
2
2
  module ModuleCluster::CascadeFeatures::PerformCascades
3
3
 
4
4
  ######################
5
- # cascade_features #
5
+ # perform_cascades #
6
6
  ######################
7
7
 
8
- def cascade_features( module_self, hooked_instance, set_stack )
8
+ def perform_cascades( module_self, action, hooked_instance, set_stack )
9
9
 
10
10
  # This method is called when a ModuleCluster module is included or extended.
11
11
  # It determines what modules should be included/extended and which should cascade.
12
-
13
- # for each set:
14
- set_stack.each do |this_set|
15
12
 
16
- # Block sets simply run a block at a hook. They do not include or extend returns from the block.
17
- # The hooked module will not be extended by ModuleCluster.
18
- if this_set.is_a?( ModuleCluster::ClusterStack::Block::Set )
13
+ unless module_self.hooks_suspended?( action )
14
+
15
+ # for each set:
16
+ set_stack.each do |this_set|
17
+
18
+ # if this particular set is suspended, skip to the next
19
+ next if this_set.suspended
20
+
21
+ # Block sets simply run a block at a hook. They do not include or extend returns from the block.
22
+ # The hooked module will not be extended by ModuleCluster.
23
+ if this_set.is_a?( ModuleCluster::ClusterStack::Block::Set )
19
24
 
20
- if this_set.dependency_module.should_run_block?( hooked_instance )
25
+ if this_set.dependency_module.should_run_block?( hooked_instance )
21
26
 
22
- case this_set.runtime_block.arity
23
- when 0
24
- module_self.instance_eval( & this_set.runtime_block )
25
- else
26
- module_self.instance_exec( hooked_instance, & this_set.runtime_block )
27
- end
27
+ case this_set.runtime_block.arity
28
+ when 0
29
+ module_self.instance_eval( & this_set.runtime_block )
30
+ else
31
+ module_self.instance_exec( hooked_instance, & this_set.runtime_block )
32
+ end
28
33
 
29
- end
34
+ end
30
35
 
31
- # Other sets take parameters and an optional block. The optional block returns are included
32
- # or extended like the parameters provided.
33
- else
36
+ # Other sets take parameters and an optional block. The optional block returns are included
37
+ # or extended like the parameters provided.
38
+ else
34
39
 
35
- # dependency modules can cause instances to be included/extended and/or cascade
36
- should_include = this_set.dependency_module.should_include_or_extend?( hooked_instance )
37
- should_cascade = this_set.dependency_module.should_cascade?( hooked_instance )
40
+ # dependency modules can cause instances to be included/extended and/or cascade
41
+ should_include = this_set.dependency_module.should_include_or_extend?( hooked_instance )
42
+ should_cascade = this_set.dependency_module.should_cascade?( hooked_instance )
38
43
 
39
- # cascade parameter modules as appropriate
40
- cascade_modules_into_hooked_instance( module_self, hooked_instance, this_set, this_set.modules ) if should_cascade
44
+ # cascade parameter modules as appropriate
45
+ cascade_modules_into_hooked_instance( module_self, hooked_instance, this_set, this_set.modules ) if should_cascade
41
46
 
42
- # include/extend parameter modules as appropriate
43
- include_extend_modules( module_self, hooked_instance, this_set, this_set.modules ) if should_include
47
+ # include/extend parameter modules as appropriate
48
+ include_extend_modules( module_self, hooked_instance, this_set, this_set.modules ) if should_include
44
49
 
45
- # process runtime block if present
46
- if this_set.runtime_includes_or_extends_block
50
+ # process runtime block if present
51
+ if this_set.runtime_includes_or_extends_block
47
52
 
48
- # if we have a runtime block, run block and collect returns as appropriate
49
- if runtime_modules = collect_block_runtime_result_modules( module_self, hooked_instance, this_set )
53
+ # if we have a runtime block, run block and collect returns as appropriate
54
+ if runtime_modules = collect_block_runtime_result_modules( module_self, hooked_instance, this_set )
50
55
 
51
- # cascade return modules if appropriate
52
- cascade_modules_into_hooked_instance( module_self, hooked_instance, this_set, runtime_modules ) if should_cascade
56
+ # cascade return modules if appropriate
57
+ cascade_modules_into_hooked_instance( module_self, hooked_instance, this_set, runtime_modules ) if should_cascade
53
58
 
54
- # include/extend return modules if appropriate
55
- include_extend_modules( module_self, hooked_instance, this_set, runtime_modules ) if should_include
59
+ # include/extend return modules if appropriate
60
+ include_extend_modules( module_self, hooked_instance, this_set, runtime_modules ) if should_include
56
61
 
57
- end
62
+ end
58
63
 
59
- end
64
+ end
60
65
 
61
- end
66
+ end
62
67
 
68
+ end
69
+
63
70
  end
64
-
71
+
65
72
  end
66
73
 
67
74
  ############################
@@ -159,15 +166,26 @@ module ModuleCluster::CascadeFeatures::PerformCascades
159
166
 
160
167
  should_include_or_extend_instance = false
161
168
 
162
- if module_class_instance_or_all == :all or
163
- module_class_instance_or_all == :module && ( into_instance.is_a?( Module ) && ! into_instance.is_a?( Class ) ) or
164
- module_class_instance_or_all == :class && into_instance.is_a?( Class ) or
165
- module_class_instance_or_all == :instance && ! into_instance.is_a?( Module )
166
-
167
- should_include_or_extend_instance = true
168
-
169
+ case module_class_instance_or_all
170
+ when :all, :module_or_class_or_instance, :module_and_class_and_instance,
171
+ :module_class_or_instance, :module_class_and_instance, :module_class_instance
172
+ should_include_or_extend_instance = true
173
+ when :module_or_class, :module_and_class, :module_class
174
+ should_include_or_extend_instance = into_instance.is_a?( Module )
175
+ when :module_or_instance, :module_and_instance, :module_instance
176
+ should_include_or_extend_instance = ( ! into_instance.is_a?( Module ) or
177
+ ( into_instance.is_a?( Module ) && ! into_instance.is_a?( Class ) ) )
178
+ when :class_or_instance, :class_and_instance, :class_instance
179
+ should_include_or_extend_instance = ( into_instance.is_a?( Class ) or
180
+ ! into_instance.is_a?( Module ) )
181
+ when :module
182
+ should_include_or_extend_instance = ( into_instance.is_a?( Module ) && ! into_instance.is_a?( Class ) )
183
+ when :class
184
+ should_include_or_extend_instance = into_instance.is_a?( Class )
185
+ when :instance
186
+ should_include_or_extend_instance = ! into_instance.is_a?( Module )
169
187
  end
170
-
188
+
171
189
  return should_include_or_extend_instance
172
190
 
173
191
  end
@@ -1,10 +1,12 @@
1
1
 
2
2
  class ModuleCluster::ClusterStack
3
3
 
4
- include ModuleCluster::ClusterStack::Block
5
- include ModuleCluster::ClusterStack::Includes
6
- include ModuleCluster::ClusterStack::Extends
7
- include ModuleCluster::ClusterStack::PrependsIncludes
8
- include ModuleCluster::ClusterStack::PrependsExtends
4
+ include Block
5
+ include Includes
6
+ include Extends
7
+ include PrependsIncludes
8
+ include PrependsExtends
9
+ include Status
10
+ include Suspend
9
11
 
10
12
  end
@@ -1,8 +1,8 @@
1
1
 
2
2
  module ModuleCluster::ClusterStack::Block
3
3
 
4
- include ModuleCluster::ClusterStack::Block::Class
5
- include ModuleCluster::ClusterStack::Block::Module
6
- include ModuleCluster::ClusterStack::Block::Instance
4
+ include Class
5
+ include Module
6
+ include Instance
7
7
 
8
8
  end
@@ -22,7 +22,7 @@ module ModuleCluster::ClusterStack::Block::Class
22
22
  ###########################
23
23
 
24
24
  def prepend_class_include( dependency_module, runtime_block )
25
- prepending_include_hooks.push( ModuleCluster::ClusterStack::Block::Set.new( dependency_module, runtime_block ) )
25
+ prepend_include_hooks.push( ModuleCluster::ClusterStack::Block::Set.new( dependency_module, runtime_block ) )
26
26
  end
27
27
 
28
28
  ##########################
@@ -30,7 +30,7 @@ module ModuleCluster::ClusterStack::Block::Class
30
30
  ##########################
31
31
 
32
32
  def prepend_class_extend( dependency_module, runtime_block )
33
- prepending_extend_hooks.push( ModuleCluster::ClusterStack::Block::Set.new( dependency_module, runtime_block ) )
33
+ prepend_extend_hooks.push( ModuleCluster::ClusterStack::Block::Set.new( dependency_module, runtime_block ) )
34
34
  end
35
35
 
36
36
  end
@@ -14,7 +14,7 @@ module ModuleCluster::ClusterStack::Block::Instance
14
14
  #############################
15
15
 
16
16
  def prepend_instance_extend( dependency_module, runtime_block )
17
- prepending_extend_hooks.push( ModuleCluster::ClusterStack::Block::Set.new( dependency_module, runtime_block ) )
17
+ prepend_extend_hooks.push( ModuleCluster::ClusterStack::Block::Set.new( dependency_module, runtime_block ) )
18
18
  end
19
19
 
20
20
  end
@@ -22,7 +22,7 @@ module ModuleCluster::ClusterStack::Block::Module
22
22
  ############################
23
23
 
24
24
  def prepend_module_include( dependency_module, runtime_block )
25
- prepending_include_hooks.push( ModuleCluster::ClusterStack::Block::Set.new( dependency_module, runtime_block ) )
25
+ prepend_include_hooks.push( ModuleCluster::ClusterStack::Block::Set.new( dependency_module, runtime_block ) )
26
26
  end
27
27
 
28
28
  ###########################
@@ -30,7 +30,7 @@ module ModuleCluster::ClusterStack::Block::Module
30
30
  ###########################
31
31
 
32
32
  def prepend_module_extend( dependency_module, runtime_block )
33
- prepending_extend_hooks.push( ModuleCluster::ClusterStack::Block::Set.new( dependency_module, runtime_block ) )
33
+ prepend_extend_hooks.push( ModuleCluster::ClusterStack::Block::Set.new( dependency_module, runtime_block ) )
34
34
  end
35
35
 
36
36
  end
@@ -1,2 +1,5 @@
1
1
 
2
- ModuleCluster::ClusterStack::Block::Set = Struct.new( :dependency_module, :runtime_block )
2
+ ModuleCluster::ClusterStack::Block::Set = Struct.new( :dependency_module,
3
+ :runtime_block,
4
+ :suspended,
5
+ :name )
@@ -6,7 +6,7 @@ module ModuleCluster::ClusterStack::Extends
6
6
  ##################
7
7
 
8
8
  def extend_hooks
9
- return @extend_hooks ||= Array.new
9
+ return @extend_hooks ||= ::ModuleCluster::ClusterStack::Set::MultiSetProxy.new
10
10
  end
11
11
 
12
12
  #####################
@@ -14,7 +14,9 @@ module ModuleCluster::ClusterStack::Extends
14
14
  #####################
15
15
 
16
16
  def extend_includes( module_instance, method, includes, runtime_includes_block )
17
- extend_hooks.push( ModuleCluster::ClusterStack::Set.new( module_instance, method, :all, :include, includes, runtime_includes_block ) )
17
+ new_set = ModuleCluster::ClusterStack::Set.new( module_instance, method, :all, :include, includes, runtime_includes_block )
18
+ extend_hooks.push( new_set )
19
+ return new_set
18
20
  end
19
21
 
20
22
  ####################
@@ -22,7 +24,9 @@ module ModuleCluster::ClusterStack::Extends
22
24
  ####################
23
25
 
24
26
  def extend_extends( module_instance, method, extends, runtime_extends_block )
25
- extend_hooks.push( ModuleCluster::ClusterStack::Set.new( module_instance, method, :all, :extend, extends, runtime_extends_block ) )
27
+ new_set = ModuleCluster::ClusterStack::Set.new( module_instance, method, :all, :extend, extends, runtime_extends_block )
28
+ extend_hooks.push( new_set )
29
+ return new_set
26
30
  end
27
31
 
28
32
  #################################
@@ -30,7 +34,9 @@ module ModuleCluster::ClusterStack::Extends
30
34
  #################################
31
35
 
32
36
  def extend_includes_and_extends( module_instance, method, includes_and_extends, runtime_includes_and_extends_block )
33
- extend_hooks.push( ModuleCluster::ClusterStack::Set.new( module_instance, method, :all, :include_and_extend, includes_and_extends, runtime_includes_and_extends_block ) )
37
+ new_set = ModuleCluster::ClusterStack::Set.new( module_instance, method, :all, :include_and_extend, includes_and_extends, runtime_includes_and_extends_block )
38
+ extend_hooks.push( new_set )
39
+ return new_set
34
40
  end
35
41
 
36
42
  ############################
@@ -38,7 +44,9 @@ module ModuleCluster::ClusterStack::Extends
38
44
  ############################
39
45
 
40
46
  def module_extend_includes( module_instance, method, includes, runtime_includes_block )
41
- extend_hooks.push( ModuleCluster::ClusterStack::Set.new( module_instance, method, :module, :include, includes, runtime_includes_block ) )
47
+ new_set = ModuleCluster::ClusterStack::Set.new( module_instance, method, :module, :include, includes, runtime_includes_block )
48
+ extend_hooks.push( new_set )
49
+ return new_set
42
50
  end
43
51
 
44
52
  ###########################
@@ -46,7 +54,9 @@ module ModuleCluster::ClusterStack::Extends
46
54
  ###########################
47
55
 
48
56
  def module_extend_extends( module_instance, method, extends, runtime_extends_block )
49
- extend_hooks.push( ModuleCluster::ClusterStack::Set.new( module_instance, method, :module, :extend, extends, runtime_extends_block ) )
57
+ new_set = ModuleCluster::ClusterStack::Set.new( module_instance, method, :module, :extend, extends, runtime_extends_block )
58
+ extend_hooks.push( new_set )
59
+ return new_set
50
60
  end
51
61
 
52
62
  ########################################
@@ -54,7 +64,9 @@ module ModuleCluster::ClusterStack::Extends
54
64
  ########################################
55
65
 
56
66
  def module_extend_includes_and_extends( module_instance, method, includes_and_extends, runtime_includes_and_extends_block )
57
- extend_hooks.push( ModuleCluster::ClusterStack::Set.new( module_instance, method, :module, :include_and_extend, includes_and_extends, runtime_includes_and_extends_block ) )
67
+ new_set = ModuleCluster::ClusterStack::Set.new( module_instance, method, :module, :include_and_extend, includes_and_extends, runtime_includes_and_extends_block )
68
+ extend_hooks.push( new_set )
69
+ return new_set
58
70
  end
59
71
 
60
72
  ###########################
@@ -62,7 +74,9 @@ module ModuleCluster::ClusterStack::Extends
62
74
  ###########################
63
75
 
64
76
  def class_extend_includes( module_instance, method, includes, runtime_includes_block )
65
- extend_hooks.push( ModuleCluster::ClusterStack::Set.new( module_instance, method, :class, :include, includes, runtime_includes_block ) )
77
+ new_set = ModuleCluster::ClusterStack::Set.new( module_instance, method, :class, :include, includes, runtime_includes_block )
78
+ extend_hooks.push( new_set )
79
+ return new_set
66
80
  end
67
81
 
68
82
  ##########################
@@ -70,7 +84,9 @@ module ModuleCluster::ClusterStack::Extends
70
84
  ##########################
71
85
 
72
86
  def class_extend_extends( module_instance, method, extends, runtime_extends_block )
73
- extend_hooks.push( ModuleCluster::ClusterStack::Set.new( module_instance, method, :class, :extend, extends, runtime_extends_block ) )
87
+ new_set = ModuleCluster::ClusterStack::Set.new( module_instance, method, :class, :extend, extends, runtime_extends_block )
88
+ extend_hooks.push( new_set )
89
+ return new_set
74
90
  end
75
91
 
76
92
  #######################################
@@ -78,7 +94,9 @@ module ModuleCluster::ClusterStack::Extends
78
94
  #######################################
79
95
 
80
96
  def class_extend_includes_and_extends( module_instance, method, includes_and_extends, runtime_includes_and_extends_block )
81
- extend_hooks.push( ModuleCluster::ClusterStack::Set.new( module_instance, method, :class, :include_and_extend, includes_and_extends, runtime_includes_and_extends_block ) )
97
+ new_set = ModuleCluster::ClusterStack::Set.new( module_instance, method, :class, :include_and_extend, includes_and_extends, runtime_includes_and_extends_block )
98
+ extend_hooks.push( new_set )
99
+ return new_set
82
100
  end
83
101
 
84
102
  ##############################
@@ -86,7 +104,9 @@ module ModuleCluster::ClusterStack::Extends
86
104
  ##############################
87
105
 
88
106
  def instance_extend_includes( module_instance, method, includes, runtime_includes_block )
89
- extend_hooks.push( ModuleCluster::ClusterStack::Set.new( module_instance, method, :instance, :include, includes, runtime_includes_block ) )
107
+ new_set = ModuleCluster::ClusterStack::Set.new( module_instance, method, :instance, :include, includes, runtime_includes_block )
108
+ extend_hooks.push( new_set )
109
+ return new_set
90
110
  end
91
111
 
92
112
  #############################
@@ -94,7 +114,9 @@ module ModuleCluster::ClusterStack::Extends
94
114
  #############################
95
115
 
96
116
  def instance_extend_extends( module_instance, method, extends, runtime_extends_block )
97
- extend_hooks.push( ModuleCluster::ClusterStack::Set.new( module_instance, method, :instance, :extend, extends, runtime_extends_block ) )
117
+ new_set = ModuleCluster::ClusterStack::Set.new( module_instance, method, :instance, :extend, extends, runtime_extends_block )
118
+ extend_hooks.push( new_set )
119
+ return new_set
98
120
  end
99
121
 
100
122
  ##########################################
@@ -102,7 +124,17 @@ module ModuleCluster::ClusterStack::Extends
102
124
  ##########################################
103
125
 
104
126
  def instance_extend_includes_and_extends( module_instance, method, includes_and_extends, runtime_includes_and_extends_block )
105
- extend_hooks.push( ModuleCluster::ClusterStack::Set.new( module_instance, method, :instance, :include_and_extend, includes_and_extends, runtime_includes_and_extends_block ) )
127
+ new_set = ModuleCluster::ClusterStack::Set.new( module_instance, method, :instance, :include_and_extend, includes_and_extends, runtime_includes_and_extends_block )
128
+ extend_hooks.push( new_set )
129
+ return new_set
130
+ end
131
+
132
+ ######################
133
+ # has_extend_hook? #
134
+ ######################
135
+
136
+ def has_extend_hook?( description )
137
+ return extend_hooks.hooks_with( description ) || false
106
138
  end
107
139
 
108
140
  end
@@ -6,7 +6,7 @@ module ModuleCluster::ClusterStack::Includes
6
6
  ###################
7
7
 
8
8
  def include_hooks
9
- return @include_hooks ||= Array.new
9
+ return @include_hooks ||= ::ModuleCluster::ClusterStack::Set::MultiSetProxy.new
10
10
  end
11
11
 
12
12
  ######################
@@ -14,7 +14,9 @@ module ModuleCluster::ClusterStack::Includes
14
14
  ######################
15
15
 
16
16
  def include_includes( module_instance, method, includes, runtime_includes_block )
17
- include_hooks.push( ModuleCluster::ClusterStack::Set.new( module_instance, method, :all, :include, includes, runtime_includes_block ) )
17
+ new_set = ModuleCluster::ClusterStack::Set.new( module_instance, method, :all, :include, includes, runtime_includes_block )
18
+ include_hooks.push( new_set )
19
+ return new_set
18
20
  end
19
21
 
20
22
  #####################
@@ -22,7 +24,9 @@ module ModuleCluster::ClusterStack::Includes
22
24
  #####################
23
25
 
24
26
  def include_extends( module_instance, method, extends, runtime_extends_block )
25
- include_hooks.push( ModuleCluster::ClusterStack::Set.new( module_instance, method, :all, :extend, extends, runtime_extends_block ) )
27
+ new_set = ModuleCluster::ClusterStack::Set.new( module_instance, method, :all, :extend, extends, runtime_extends_block )
28
+ include_hooks.push( new_set )
29
+ return new_set
26
30
  end
27
31
 
28
32
  ##################################
@@ -30,7 +34,9 @@ module ModuleCluster::ClusterStack::Includes
30
34
  ##################################
31
35
 
32
36
  def include_includes_and_extends( module_instance, method, includes_and_extends, runtime_includes_and_extends_block )
33
- include_hooks.push( ModuleCluster::ClusterStack::Set.new( module_instance, method, :all, :include_and_extend, includes_and_extends, runtime_includes_and_extends_block ) )
37
+ new_set = ModuleCluster::ClusterStack::Set.new( module_instance, method, :all, :include_and_extend, includes_and_extends, runtime_includes_and_extends_block )
38
+ include_hooks.push( new_set )
39
+ return new_set
34
40
  end
35
41
 
36
42
  #############################
@@ -38,7 +44,9 @@ module ModuleCluster::ClusterStack::Includes
38
44
  #############################
39
45
 
40
46
  def module_include_includes( module_instance, method, includes, runtime_includes_block )
41
- include_hooks.push( ModuleCluster::ClusterStack::Set.new( module_instance, method, :module, :include, includes, runtime_includes_block ) )
47
+ new_set = ModuleCluster::ClusterStack::Set.new( module_instance, method, :module, :include, includes, runtime_includes_block )
48
+ include_hooks.push( new_set )
49
+ return new_set
42
50
  end
43
51
 
44
52
  ############################
@@ -46,7 +54,9 @@ module ModuleCluster::ClusterStack::Includes
46
54
  ############################
47
55
 
48
56
  def module_include_extends( module_instance, method, extends, runtime_extends_block )
49
- include_hooks.push( ModuleCluster::ClusterStack::Set.new( module_instance, method, :module, :extend, extends, runtime_extends_block ) )
57
+ new_set = ModuleCluster::ClusterStack::Set.new( module_instance, method, :module, :extend, extends, runtime_extends_block )
58
+ include_hooks.push( new_set )
59
+ return new_set
50
60
  end
51
61
 
52
62
  #########################################
@@ -54,7 +64,9 @@ module ModuleCluster::ClusterStack::Includes
54
64
  #########################################
55
65
 
56
66
  def module_include_includes_and_extends( module_instance, method, includes_and_extends, runtime_includes_and_extends_block )
57
- include_hooks.push( ModuleCluster::ClusterStack::Set.new( module_instance, method, :module, :include_and_extend, includes_and_extends, runtime_includes_and_extends_block ) )
67
+ new_set = ModuleCluster::ClusterStack::Set.new( module_instance, method, :module, :include_and_extend, includes_and_extends, runtime_includes_and_extends_block )
68
+ include_hooks.push( new_set )
69
+ return new_set
58
70
  end
59
71
 
60
72
  ############################
@@ -62,7 +74,9 @@ module ModuleCluster::ClusterStack::Includes
62
74
  ############################
63
75
 
64
76
  def class_include_includes( module_instance, method, includes, runtime_includes_block )
65
- include_hooks.push( ModuleCluster::ClusterStack::Set.new( module_instance, method, :class, :include, includes, runtime_includes_block ) )
77
+ new_set = ModuleCluster::ClusterStack::Set.new( module_instance, method, :class, :include, includes, runtime_includes_block )
78
+ include_hooks.push( new_set )
79
+ return new_set
66
80
  end
67
81
 
68
82
  ###########################
@@ -70,7 +84,9 @@ module ModuleCluster::ClusterStack::Includes
70
84
  ###########################
71
85
 
72
86
  def class_include_extends( module_instance, method, extends, runtime_extends_block )
73
- include_hooks.push( ModuleCluster::ClusterStack::Set.new( module_instance, method, :class, :extend, extends, runtime_extends_block ) )
87
+ new_set = ModuleCluster::ClusterStack::Set.new( module_instance, method, :class, :extend, extends, runtime_extends_block )
88
+ include_hooks.push( new_set )
89
+ return new_set
74
90
  end
75
91
 
76
92
  ########################################
@@ -78,7 +94,17 @@ module ModuleCluster::ClusterStack::Includes
78
94
  ########################################
79
95
 
80
96
  def class_include_includes_and_extends( module_instance, method, includes_and_extends, runtime_includes_and_extends_block )
81
- include_hooks.push( ModuleCluster::ClusterStack::Set.new( module_instance, method, :class, :include_and_extend, includes_and_extends, runtime_includes_and_extends_block ) )
97
+ new_set = ModuleCluster::ClusterStack::Set.new( module_instance, method, :class, :include_and_extend, includes_and_extends, runtime_includes_and_extends_block )
98
+ include_hooks.push( new_set )
99
+ return new_set
100
+ end
101
+
102
+ #######################
103
+ # has_include_hook? #
104
+ #######################
105
+
106
+ def has_include_hook?( description )
107
+ return include_hooks.hooks_with( description ) || false
82
108
  end
83
109
 
84
110
  end