module-cluster 1.4.6 → 1.4.8
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.
- data/lib/module-cluster.rb +0 -1
- data/lib/module-cluster/ModuleCluster/Define/Block/CascadingModuleOrSubclass.rb +0 -1
- data/lib/module-cluster/ModuleCluster/Define/Block/ClassOrModuleOrSubclass.rb +0 -1
- data/lib/module-cluster/ModuleCluster/Define/Block/ClassOrSubclass.rb +0 -1
- data/lib/module-cluster/ModuleCluster/Define/Block/ModuleOrSubclass.rb +0 -1
- data/lib/module-cluster/ModuleCluster/Define/Block/Subclass.rb +4 -11
- data/lib/module-cluster/_private_/ModuleCluster/CascadeFeatures.rb +28 -5
- data/lib/module-cluster/_private_/ModuleCluster/CascadeFeatures/PerformCascades.rb +16 -10
- data/lib/module-cluster/_private_/ModuleCluster/CascadeFeatures/Subclass.rb +2 -0
- data/lib/module-cluster/_private_/ModuleCluster/ExtendForCascade.rb +22 -8
- data/spec/ModuleCluster/Define/Block/CascadingClass_spec.rb +13 -0
- data/spec/ModuleCluster/Define/Block/Module_spec.rb +6 -0
- data/spec/ModuleCluster/Define/Block/Subclass_spec.rb +3 -2
- metadata +1 -2
- data/lib/module-cluster/_private_/ModuleCluster/ExtendForCascade/Subclass.rb +0 -68
data/lib/module-cluster.rb
CHANGED
@@ -97,7 +97,6 @@ require_relative 'module-cluster/_private_/ModuleCluster/CascadeFeatures/Subclas
|
|
97
97
|
require_relative 'module-cluster/_private_/ModuleCluster/CascadeFeatures.rb'
|
98
98
|
|
99
99
|
require_relative 'module-cluster/_private_/ModuleCluster/ExtendForCascade.rb'
|
100
|
-
require_relative 'module-cluster/_private_/ModuleCluster/ExtendForCascade/Subclass.rb'
|
101
100
|
|
102
101
|
require_relative 'module-cluster/_private_/ModuleCluster/ClusterStack/Set.rb'
|
103
102
|
require_relative 'module-cluster/_private_/ModuleCluster/ClusterStack/Set/MultiSetProxy.rb'
|
@@ -6,7 +6,6 @@ module ::ModuleCluster::Define::Block::CascadingModuleOrSubclass
|
|
6
6
|
include ::ModuleCluster::Define::Block::Subclass
|
7
7
|
include ::ModuleCluster::Suspend::WithoutHooks
|
8
8
|
|
9
|
-
extend ::ModuleCluster::ExtendForCascade::Subclass
|
10
9
|
extend ::ModuleCluster::ExtendForCascade
|
11
10
|
|
12
11
|
##########################################
|
@@ -5,7 +5,6 @@ module ::ModuleCluster::Define::Block::ClassOrModuleOrSubclass
|
|
5
5
|
include ::ModuleCluster::Define::Block::ClassOrModule
|
6
6
|
include ::ModuleCluster::Suspend::WithoutHooks
|
7
7
|
|
8
|
-
extend ::ModuleCluster::ExtendForCascade::Subclass
|
9
8
|
extend ::ModuleCluster::ExtendForCascade
|
10
9
|
|
11
10
|
##########################
|
@@ -6,7 +6,6 @@ module ::ModuleCluster::Define::Block::ClassOrSubclass
|
|
6
6
|
include ::ModuleCluster::Define::Block::Subclass
|
7
7
|
include ::ModuleCluster::Suspend::WithoutHooks
|
8
8
|
|
9
|
-
extend ::ModuleCluster::ExtendForCascade::Subclass
|
10
9
|
extend ::ModuleCluster::ExtendForCascade
|
11
10
|
|
12
11
|
##########################
|
@@ -6,7 +6,6 @@ module ::ModuleCluster::Define::Block::ModuleOrSubclass
|
|
6
6
|
include ::ModuleCluster::Define::Block::Subclass
|
7
7
|
include ::ModuleCluster::Suspend::WithoutHooks
|
8
8
|
|
9
|
-
extend ::ModuleCluster::ExtendForCascade::Subclass
|
10
9
|
extend ::ModuleCluster::ExtendForCascade
|
11
10
|
|
12
11
|
##########################
|
@@ -3,18 +3,9 @@ module ::ModuleCluster::Define::Block::Subclass
|
|
3
3
|
|
4
4
|
include ::ModuleCluster::CascadeFeatures::ClusterStack
|
5
5
|
include ::ModuleCluster::Suspend::WithoutHooks
|
6
|
-
extend ::ModuleCluster::Define::Block::Module
|
7
|
-
|
8
|
-
# module_extend do |module_instance|
|
9
|
-
# module_instance.module_eval do
|
10
|
-
# extend ::ModuleCluster::Define::Block::Class
|
11
|
-
# class_include do |class_instance|
|
12
|
-
# end
|
13
|
-
# end
|
14
|
-
# end
|
15
|
-
|
16
|
-
extend ::ModuleCluster::ExtendForCascade::Subclass
|
17
6
|
|
7
|
+
extend ::ModuleCluster::ExtendForCascade
|
8
|
+
|
18
9
|
##########################
|
19
10
|
# self.should_cascade? #
|
20
11
|
##########################
|
@@ -55,9 +46,11 @@ module ::ModuleCluster::Define::Block::Subclass
|
|
55
46
|
##############
|
56
47
|
|
57
48
|
def subclass( & runtime_block )
|
49
|
+
|
58
50
|
return cluster_stack.subclass( ::ModuleCluster::Define::Block::Subclass,
|
59
51
|
__method__,
|
60
52
|
runtime_block )
|
53
|
+
|
61
54
|
end
|
62
55
|
|
63
56
|
end
|
@@ -8,8 +8,11 @@ module ::ModuleCluster::CascadeFeatures
|
|
8
8
|
#####################
|
9
9
|
|
10
10
|
def append_features( hooked_instance )
|
11
|
-
|
12
|
-
::ModuleCluster::CascadeFeatures.perform_cascades( self,
|
11
|
+
|
12
|
+
::ModuleCluster::CascadeFeatures.perform_cascades( self,
|
13
|
+
:prepend_include,
|
14
|
+
hooked_instance,
|
15
|
+
cluster_stack.prepend_include_hooks )
|
13
16
|
|
14
17
|
super
|
15
18
|
|
@@ -23,7 +26,21 @@ module ::ModuleCluster::CascadeFeatures
|
|
23
26
|
|
24
27
|
super
|
25
28
|
|
26
|
-
::ModuleCluster::CascadeFeatures.perform_cascades( self,
|
29
|
+
::ModuleCluster::CascadeFeatures.perform_cascades( self,
|
30
|
+
:include,
|
31
|
+
hooked_instance,
|
32
|
+
cluster_stack.include_hooks )
|
33
|
+
|
34
|
+
# if we are included in a class and we have cascading inherit hooks we need to move them over
|
35
|
+
# append_features and included are both called for an inlucde, so we only need to do this in one
|
36
|
+
if hooked_instance.is_a?( Class )
|
37
|
+
|
38
|
+
unless cluster_stack.inherited_hooks.empty?
|
39
|
+
hooked_instance.extend( ::ModuleCluster::Define::Block::Subclass )
|
40
|
+
hooked_instance.cluster_stack.inherited_hooks.concat( cluster_stack.inherited_hooks )
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
27
44
|
|
28
45
|
end
|
29
46
|
|
@@ -33,7 +50,10 @@ module ::ModuleCluster::CascadeFeatures
|
|
33
50
|
|
34
51
|
def extend_object( hooked_instance )
|
35
52
|
|
36
|
-
::ModuleCluster::CascadeFeatures.perform_cascades( self,
|
53
|
+
::ModuleCluster::CascadeFeatures.perform_cascades( self,
|
54
|
+
:prepend_extend,
|
55
|
+
hooked_instance,
|
56
|
+
cluster_stack.prepend_extend_hooks )
|
37
57
|
|
38
58
|
super
|
39
59
|
|
@@ -47,7 +67,10 @@ module ::ModuleCluster::CascadeFeatures
|
|
47
67
|
|
48
68
|
super
|
49
69
|
|
50
|
-
::ModuleCluster::CascadeFeatures.perform_cascades( self,
|
70
|
+
::ModuleCluster::CascadeFeatures.perform_cascades( self,
|
71
|
+
:extend,
|
72
|
+
hooked_instance,
|
73
|
+
cluster_stack.extend_hooks )
|
51
74
|
|
52
75
|
end
|
53
76
|
|
@@ -1,7 +1,6 @@
|
|
1
1
|
|
2
2
|
module ::ModuleCluster::CascadeFeatures::PerformCascades
|
3
3
|
|
4
|
-
$this_time = 0
|
5
4
|
######################
|
6
5
|
# perform_cascades #
|
7
6
|
######################
|
@@ -26,7 +25,7 @@ module ::ModuleCluster::CascadeFeatures::PerformCascades
|
|
26
25
|
|
27
26
|
# if our blocks are set to cascade then we need to copy inherit hooks
|
28
27
|
if this_set.dependency_module.should_cascade?( hooked_instance )
|
29
|
-
cascade_block_into_hooked_instance( module_self, hooked_instance, this_set )
|
28
|
+
cascade_block_into_hooked_instance( module_self, action, hooked_instance, this_set )
|
30
29
|
end
|
31
30
|
|
32
31
|
if this_set.dependency_module.should_run_block?( hooked_instance )
|
@@ -129,20 +128,27 @@ module ::ModuleCluster::CascadeFeatures::PerformCascades
|
|
129
128
|
# cascade_block_into_hooked_instance #
|
130
129
|
########################################
|
131
130
|
|
132
|
-
def cascade_block_into_hooked_instance( module_self, hooked_instance, set )
|
131
|
+
def cascade_block_into_hooked_instance( module_self, action, hooked_instance, set )
|
132
|
+
|
133
|
+
hooked_instance.extend( set.dependency_module )
|
134
|
+
|
135
|
+
if hooked_instance.is_a?( Class )
|
136
|
+
|
137
|
+
if action == :inherited
|
133
138
|
|
134
|
-
|
135
|
-
|
139
|
+
unless set.dependency_module == ::ModuleCluster::CascadeFeatures::Subclass
|
140
|
+
hooked_instance.extend( ::ModuleCluster::CascadeFeatures::Subclass )
|
141
|
+
end
|
142
|
+
|
143
|
+
hooked_instance.subclass( & set.runtime_block )
|
136
144
|
|
137
|
-
|
138
|
-
|
145
|
+
end
|
146
|
+
|
147
|
+
else
|
139
148
|
|
140
149
|
# and we call the set's definition method to cascade
|
141
150
|
hooked_instance.__send__( set.method, & set.runtime_block )
|
142
151
|
|
143
|
-
existing_inherit_hooks = module_self.cluster_stack.inherited_hooks
|
144
|
-
hooked_instance.cluster_stack.inherited_hooks.concat( existing_inherit_hooks )
|
145
|
-
|
146
152
|
end
|
147
153
|
|
148
154
|
end
|
@@ -6,15 +6,29 @@ module ::ModuleCluster::ExtendForCascade
|
|
6
6
|
##############
|
7
7
|
|
8
8
|
def extended( module_cluster_configuration_instance )
|
9
|
+
|
9
10
|
super
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
11
|
+
|
12
|
+
if module_cluster_configuration_instance.is_a?( Class )
|
13
|
+
|
14
|
+
module_cluster_configuration_instance.module_eval do
|
15
|
+
# when a module-cluster definition module is used to extend a module,
|
16
|
+
# define self#extended, self#included, self#append_features, self#extend_object in
|
17
|
+
# module_cluster_module ( module extended with module-cluster definition module )
|
18
|
+
extend ::ModuleCluster::CascadeFeatures::Subclass
|
19
|
+
end
|
20
|
+
|
21
|
+
else
|
22
|
+
|
23
|
+
module_cluster_configuration_instance.instance_eval do
|
24
|
+
# when a module-cluster definition module is used to extend a module,
|
25
|
+
# define self#extended, self#included, self#append_features, self#extend_object in
|
26
|
+
# module_cluster_module ( module extended with module-cluster definition module )
|
27
|
+
extend ::ModuleCluster::CascadeFeatures
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
18
32
|
end
|
19
33
|
|
20
34
|
end
|
@@ -14,12 +14,21 @@ describe ::ModuleCluster::Define::Block::CascadingClass do
|
|
14
14
|
cascading_class_include do
|
15
15
|
block_ran = true
|
16
16
|
end
|
17
|
+
cluster_stack.inherited_hooks.count.should == 1
|
17
18
|
respond_to?( :included ).should == true
|
18
19
|
module ModuleProof
|
19
20
|
include ::ModuleCluster::Define::Block::CascadingClass::Mock01
|
21
|
+
respond_to?( :cluster_stack ).should == true
|
22
|
+
cluster_stack.inherited_hooks.count.should == 1
|
20
23
|
end
|
21
24
|
block_ran.should == false
|
22
25
|
module ModuleProof2
|
26
|
+
include ::ModuleCluster::Define::Block::CascadingClass::Mock01::ModuleProof
|
27
|
+
respond_to?( :cluster_stack ).should == true
|
28
|
+
cluster_stack.inherited_hooks.count.should == 1
|
29
|
+
end
|
30
|
+
block_ran.should == false
|
31
|
+
module ModuleProofExtended
|
23
32
|
extend ::ModuleCluster::Define::Block::CascadingClass::Mock01
|
24
33
|
end
|
25
34
|
block_ran.should == false
|
@@ -33,10 +42,14 @@ describe ::ModuleCluster::Define::Block::CascadingClass do
|
|
33
42
|
block_ran.should == false
|
34
43
|
class CascadingClassProof
|
35
44
|
include ::ModuleCluster::Define::Block::CascadingClass::Mock01
|
45
|
+
respond_to?( :cluster_stack ).should == true
|
46
|
+
cluster_stack.inherited_hooks.count.should == 1
|
36
47
|
end
|
37
48
|
block_ran.should == true
|
38
49
|
block_ran = false
|
39
50
|
class CascadingClassProof2 < CascadingClassProof
|
51
|
+
respond_to?( :cluster_stack ).should == true
|
52
|
+
cluster_stack.inherited_hooks.count.should == 1
|
40
53
|
end
|
41
54
|
block_ran.should == true
|
42
55
|
end
|
@@ -15,25 +15,31 @@ describe ::ModuleCluster::Define::Block::Module do
|
|
15
15
|
block_ran = true
|
16
16
|
self.should == ::ModuleCluster::Define::Block::Module::Mock01
|
17
17
|
end
|
18
|
+
cluster_stack.include_hooks.count.should == 1
|
18
19
|
respond_to?( :included ).should == true
|
19
20
|
class ClassProof
|
20
21
|
extend ::ModuleCluster::Define::Block::Module::Mock01
|
22
|
+
respond_to?( :cluster_stack ).should == false
|
21
23
|
end
|
22
24
|
block_ran.should == false
|
23
25
|
class ClassProof2
|
24
26
|
include ::ModuleCluster::Define::Block::Module::Mock01
|
27
|
+
respond_to?( :cluster_stack ).should == false
|
25
28
|
end
|
26
29
|
block_ran.should == false
|
27
30
|
Object.new.instance_eval do
|
28
31
|
extend ::ModuleCluster::Define::Block::Module::Mock01
|
32
|
+
respond_to?( :cluster_stack ).should == false
|
29
33
|
end
|
30
34
|
block_ran.should == false
|
31
35
|
module ModuleProof
|
32
36
|
extend ::ModuleCluster::Define::Block::Module::Mock01
|
37
|
+
respond_to?( :cluster_stack ).should == false
|
33
38
|
end
|
34
39
|
block_ran.should == false
|
35
40
|
module ModuleProof2
|
36
41
|
include ::ModuleCluster::Define::Block::Module::Mock01
|
42
|
+
respond_to?( :cluster_stack ).should == false
|
37
43
|
end
|
38
44
|
block_ran.should == true
|
39
45
|
end
|
@@ -46,8 +46,9 @@ describe ::ModuleCluster::Define::Block::Subclass do
|
|
46
46
|
end
|
47
47
|
respond_to?( :included ).should == true
|
48
48
|
respond_to?( :extended ).should == true
|
49
|
-
respond_to?( :append_features ).should ==
|
50
|
-
respond_to?( :extend_object ).should ==
|
49
|
+
respond_to?( :append_features ).should == true
|
50
|
+
respond_to?( :extend_object ).should == true
|
51
|
+
respond_to?( :inherited ).should == false
|
51
52
|
class ClassProof
|
52
53
|
include ::ModuleCluster::Define::Block::Subclass::Mock02
|
53
54
|
respond_to?( :inherited ).should == true
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: module-cluster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -42,7 +42,6 @@ files:
|
|
42
42
|
- lib/module-cluster/_private_/ModuleCluster/ClusterStack/Status.rb
|
43
43
|
- lib/module-cluster/_private_/ModuleCluster/ClusterStack/Suspend.rb
|
44
44
|
- lib/module-cluster/_private_/ModuleCluster/ClusterStack.rb
|
45
|
-
- lib/module-cluster/_private_/ModuleCluster/ExtendForCascade/Subclass.rb
|
46
45
|
- lib/module-cluster/_private_/ModuleCluster/ExtendForCascade.rb
|
47
46
|
- lib/module-cluster/ModuleCluster/Define/Block/CascadingClass.rb
|
48
47
|
- lib/module-cluster/ModuleCluster/Define/Block/CascadingClassOrModule.rb
|
@@ -1,68 +0,0 @@
|
|
1
|
-
|
2
|
-
module ::ModuleCluster::ExtendForCascade::Subclass
|
3
|
-
|
4
|
-
##############
|
5
|
-
# extended #
|
6
|
-
##############
|
7
|
-
|
8
|
-
def extended( module_cluster_configuration_class_instance )
|
9
|
-
|
10
|
-
super
|
11
|
-
|
12
|
-
if module_cluster_configuration_class_instance.is_a?( Class )
|
13
|
-
|
14
|
-
module_cluster_configuration_class_instance.module_eval do
|
15
|
-
# when a module-cluster definition module is used to extend a module,
|
16
|
-
# define self#inherited module_cluster_configuration_class_instance
|
17
|
-
# (class extended with module-cluster definition module)
|
18
|
-
extend ::ModuleCluster::CascadeFeatures::Subclass
|
19
|
-
end
|
20
|
-
|
21
|
-
elsif module_cluster_configuration_class_instance.is_a?( Module )
|
22
|
-
|
23
|
-
# we need to create an include hook in the module so that when the class includes it,
|
24
|
-
# it gets the subclass definition
|
25
|
-
module_cluster_configuration_class_instance.module_eval do
|
26
|
-
# when a module is enabled for subclass we need to cascade subclassing
|
27
|
-
extend ::ModuleCluster::ExtendForCascade::Subclass
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
##############
|
35
|
-
# included #
|
36
|
-
##############
|
37
|
-
|
38
|
-
def included( module_cluster_configuration_class_instance )
|
39
|
-
|
40
|
-
super
|
41
|
-
|
42
|
-
existing_inherited_hooks = cluster_stack.inherited_hooks
|
43
|
-
|
44
|
-
if module_cluster_configuration_class_instance.is_a?( Class )
|
45
|
-
|
46
|
-
module_cluster_configuration_class_instance.module_eval do
|
47
|
-
# when a module-cluster definition module is used to extend a module,
|
48
|
-
# define self#inherited module_cluster_configuration_class_instance
|
49
|
-
# (class extended with module-cluster definition module)
|
50
|
-
extend ::ModuleCluster::Define::Block::Subclass
|
51
|
-
cluster_stack.inherited_hooks.concat( existing_inherited_hooks )
|
52
|
-
end
|
53
|
-
|
54
|
-
elsif module_cluster_configuration_class_instance.is_a?( Module )
|
55
|
-
|
56
|
-
# we need to create an include hook in the module so that when the class includes it,
|
57
|
-
# it gets the subclass definition
|
58
|
-
module_cluster_configuration_class_instance.module_eval do
|
59
|
-
# when a module is enabled for subclass we need to cascade subclassing
|
60
|
-
extend ::ModuleCluster::Define::Block::Subclass
|
61
|
-
cluster_stack.inherited_hooks.concat( existing_inherited_hooks )
|
62
|
-
end
|
63
|
-
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|