cascading_configuration 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/CHANGELOG.md +40 -0
  2. data/README.md +211 -0
  3. data/lib/cascading_configuration/array/sorted/unique.rb +110 -0
  4. data/lib/cascading_configuration/array/sorted.rb +106 -0
  5. data/lib/cascading_configuration/array/unique.rb +106 -0
  6. data/lib/cascading_configuration/array.rb +103 -0
  7. data/lib/cascading_configuration/core/enable_instance_support.rb +22 -0
  8. data/lib/cascading_configuration/core/enable_module_support.rb +24 -0
  9. data/lib/cascading_configuration/core/encapsulation.rb +343 -0
  10. data/lib/cascading_configuration/core/instance_controller/extension_module.rb +38 -0
  11. data/lib/cascading_configuration/core/instance_controller/support_module/instance_support_module.rb +21 -0
  12. data/lib/cascading_configuration/core/instance_controller/support_module/singleton_support_module.rb +21 -0
  13. data/lib/cascading_configuration/core/instance_controller/support_module.rb +253 -0
  14. data/lib/cascading_configuration/core/instance_controller.rb +840 -0
  15. data/lib/cascading_configuration/core/module/block_configurations/cascading_variables.rb +129 -0
  16. data/lib/cascading_configuration/core/module/block_configurations.rb +15 -0
  17. data/lib/cascading_configuration/core/module/extended_configurations/compositing_objects.rb +173 -0
  18. data/lib/cascading_configuration/core/module/extended_configurations.rb +65 -0
  19. data/lib/cascading_configuration/core/module/inheriting_values.rb +64 -0
  20. data/lib/cascading_configuration/core/module.rb +284 -0
  21. data/lib/cascading_configuration/core.rb +23 -0
  22. data/lib/cascading_configuration/hash.rb +103 -0
  23. data/lib/cascading_configuration/setting.rb +87 -0
  24. data/lib/cascading_configuration.rb +47 -0
  25. data/lib/namespaces.rb +9 -0
  26. data/lib/requires.rb +46 -0
  27. data/spec/cascading_configuration/array/sorted/unique_spec.rb +742 -0
  28. data/spec/cascading_configuration/array/sorted_spec.rb +741 -0
  29. data/spec/cascading_configuration/array/unique_spec.rb +746 -0
  30. data/spec/cascading_configuration/array_spec.rb +768 -0
  31. data/spec/cascading_configuration/core/encapsulation_spec.rb +208 -0
  32. data/spec/cascading_configuration/core/instance_controller/extension_module_spec.rb +26 -0
  33. data/spec/cascading_configuration/core/instance_controller/support_module_spec.rb +269 -0
  34. data/spec/cascading_configuration/core/instance_controller_spec.rb +273 -0
  35. data/spec/cascading_configuration/core/module/block_configurations/cascading_variables_spec.rb +17 -0
  36. data/spec/cascading_configuration/core/module/extended_configurations/compositing_objects_spec.rb +127 -0
  37. data/spec/cascading_configuration/core/module/extended_configurations_spec.rb +37 -0
  38. data/spec/cascading_configuration/core/module/inheriting_values_spec.rb +87 -0
  39. data/spec/cascading_configuration/core/module_spec.rb +491 -0
  40. data/spec/cascading_configuration/hash_spec.rb +826 -0
  41. data/spec/cascading_configuration/setting_spec.rb +687 -0
  42. data/spec/cascading_configuration_spec.rb +58 -0
  43. metadata +185 -0
@@ -0,0 +1,273 @@
1
+
2
+ require_relative '../../../lib/cascading_configuration.rb'
3
+
4
+ describe ::CascadingConfiguration::Core::InstanceController do
5
+
6
+ ##############################
7
+ # initialize #
8
+ # instance #
9
+ # self.instance_controller #
10
+ ##############################
11
+
12
+ it 'can initialize for an instance' do
13
+ module ::CascadingConfiguration::Core::InstanceController::InitializeMock
14
+ ForInstance = ::Module.new
15
+ InstanceController = ::CascadingConfiguration::Core::InstanceController.new( ForInstance )
16
+ InstanceController.instance.should == ForInstance
17
+ ForInstance::Controller.should == InstanceController
18
+ ::CascadingConfiguration::Core::InstanceController.instance_controller( ForInstance ).should == InstanceController
19
+ for_instance = ::Object.new
20
+ instance_controller = ::CascadingConfiguration::Core::InstanceController.new( for_instance )
21
+ instance_controller.instance.should == for_instance
22
+ end
23
+ end
24
+
25
+ ####################################
26
+ # initialize_inheriting_instance #
27
+ ####################################
28
+
29
+ it 'causes the instance it extends to be enabled for managing inheritable support modules' do
30
+ module ::CascadingConfiguration::Core::InstanceController::InheritanceMock
31
+ Encapsulation = ::CascadingConfiguration::Core::Module::DefaultEncapsulation
32
+ ForInstance = ::Module.new
33
+ InstanceController = ::CascadingConfiguration::Core::InstanceController.new( ForInstance )
34
+ AnotherModule = ::Module.new do
35
+ include ForInstance
36
+ end
37
+ #AnotherAnotherModule = ::Module.new do
38
+ # include AnotherModule
39
+ #end
40
+ #Encapsulation.parents( AnotherAnotherModule ).include?( AnotherModule ).should == true
41
+ end
42
+ end
43
+
44
+ ###########################
45
+ # add_extension_modules #
46
+ # extension_modules #
47
+ ###########################
48
+
49
+ it 'can declare and retrieve extension modules for a configuration name on instance in an encapsulation' do
50
+ module ::CascadingConfiguration::Core::InstanceController::AddExtensionModulesMock
51
+
52
+ Encapsulation = ::CascadingConfiguration::Core::Module::DefaultEncapsulation
53
+
54
+ ForInstance = ::Module.new
55
+ InstanceController = ::CascadingConfiguration::Core::InstanceController.new( ForInstance )
56
+
57
+ module SomeModuleA
58
+ end
59
+ module SomeModuleB
60
+ end
61
+ module SomeModuleC
62
+ end
63
+
64
+ InstanceController.add_extension_modules( :some_configuration, Encapsulation, SomeModuleA, SomeModuleB, SomeModuleC ) do
65
+ def some_other_stuff
66
+ end
67
+ end
68
+ extension_modules = InstanceController.extension_modules( :some_configuration, Encapsulation )
69
+ extension_modules.count.should == 4
70
+ end
71
+ end
72
+
73
+ ##############################
74
+ # extension_modules_upward #
75
+ ##############################
76
+
77
+ it 'can get an array of extension modules ' do
78
+ module ::CascadingConfiguration::Core::InstanceController::ExtensionModulesUpwardMock
79
+
80
+ Encapsulation = ::CascadingConfiguration::Core::Module::DefaultEncapsulation
81
+
82
+ CCMMock = ::Module.new do
83
+ def self.create_configuration( encapsulation, instance, this_name )
84
+ end
85
+ def self.initialize_configuration( encapsulation, instance, this_name )
86
+ end
87
+ end
88
+
89
+ Instance_A = ::Module.new
90
+ InstanceController_A = ::CascadingConfiguration::Core::InstanceController.new( Instance_A )
91
+ Encapsulation.register_configuration( Instance_A, :some_configuration, CCMMock )
92
+ ExtensionModule_A1 = ::Module.new
93
+ ExtensionModule_A2 = ::Module.new
94
+ InstanceController_A.add_extension_modules( :some_configuration, Encapsulation, ExtensionModule_A1, ExtensionModule_A2 ) do
95
+ def some_other_stuff
96
+ end
97
+ end
98
+ InstanceController_A.extension_modules( :some_configuration ).count.should == 3
99
+ InstanceController_A.extension_modules_upward( :some_configuration ).should == [ InstanceController_A::Default_some_configuration, ExtensionModule_A2, ExtensionModule_A1 ]
100
+
101
+
102
+ Instance_B = ::Module.new
103
+ Encapsulation.register_child_for_parent( Instance_B, Instance_A )
104
+
105
+ Instance_C = ::Module.new
106
+ InstanceController_C = ::CascadingConfiguration::Core::InstanceController.new( Instance_C )
107
+ Encapsulation.register_child_for_parent( Instance_C, Instance_B )
108
+ ExtensionModule_C1 = ::Module.new
109
+ InstanceController_C.add_extension_modules( :some_configuration, Encapsulation, ExtensionModule_C1 ) do
110
+ def some_other_stuff
111
+ end
112
+ end
113
+ InstanceController_C.extension_modules_upward( :some_configuration ).should == [ InstanceController_C::Default_some_configuration, ExtensionModule_C1, InstanceController_A::Default_some_configuration, ExtensionModule_A2, ExtensionModule_A1 ]
114
+
115
+ InstanceController_B = ::CascadingConfiguration::Core::InstanceController.new( Instance_B )
116
+ InstanceController_B.extension_modules_upward( :some_configuration ).should == [ InstanceController_A::Default_some_configuration, ExtensionModule_A2, ExtensionModule_A1 ]
117
+
118
+ end
119
+ end
120
+
121
+ ####################
122
+ # create_support #
123
+ # support #
124
+ ####################
125
+
126
+ it 'can manage creation and return of module instances' do
127
+ module ::CascadingConfiguration::Core::InstanceController::CreateSupportMock
128
+
129
+ Encapsulation = ::CascadingConfiguration::Core::Module::DefaultEncapsulation
130
+
131
+ ForInstance = ::Module.new
132
+ InstanceController = ::CascadingConfiguration::Core::InstanceController.new( ForInstance )
133
+
134
+ # should_include
135
+ ModuleInstance_Include = InstanceController.create_support( :some_type1, Encapsulation, nil, true, false, false, false )
136
+ InstanceController.support( :some_type1 ).should == ModuleInstance_Include
137
+ ForInstance.ancestors.include?( ModuleInstance_Include ).should == true
138
+ ForInstance.is_a?( ModuleInstance_Include ).should == false
139
+ InstanceController.cascade_includes.include?( ModuleInstance_Include ).should == false
140
+ InstanceController.cascade_extends.include?( ModuleInstance_Include ).should == false
141
+
142
+ # should_extend
143
+ ModuleInstance_Extend = InstanceController.create_support( :some_type2, Encapsulation, false, nil, true, false, false )
144
+ InstanceController.support( :some_type2 ).should == ModuleInstance_Extend
145
+ ForInstance.ancestors.include?( ModuleInstance_Extend ).should == false
146
+ ForInstance.is_a?( ModuleInstance_Extend ).should == true
147
+ InstanceController.cascade_includes.include?( ModuleInstance_Extend ).should == false
148
+ InstanceController.cascade_extends.include?( ModuleInstance_Extend ).should == false
149
+
150
+ # should_cascade_includes
151
+ ModuleInstance_CascadeIncludes = InstanceController.create_support( :some_type3, Encapsulation, false, nil, false, true, false )
152
+ InstanceController.support( :some_type3 ).should == ModuleInstance_CascadeIncludes
153
+ ForInstance.ancestors.include?( ModuleInstance_CascadeIncludes ).should == false
154
+ ForInstance.is_a?( ModuleInstance_CascadeIncludes ).should == false
155
+ InstanceController.cascade_includes.include?( ModuleInstance_CascadeIncludes ).should == true
156
+ InstanceController.cascade_extends.include?( ModuleInstance_CascadeIncludes ).should == false
157
+
158
+ # should_cascade_extends
159
+ ModuleInstance_CascadeExtends = InstanceController.create_support( :some_type4, Encapsulation, nil, false, false, false, true )
160
+ InstanceController.support( :some_type4 ).should == ModuleInstance_CascadeExtends
161
+ ForInstance.ancestors.include?( ModuleInstance_CascadeExtends ).should == false
162
+ ForInstance.is_a?( ModuleInstance_CascadeExtends ).should == false
163
+ InstanceController.cascade_includes.include?( ModuleInstance_CascadeExtends ).should == false
164
+ InstanceController.cascade_extends.include?( ModuleInstance_CascadeExtends ).should == true
165
+
166
+ AnotherModule_IncludeA = ::Module.new do
167
+ include ForInstance
168
+ ancestors.include?( ModuleInstance_CascadeIncludes ).should == true
169
+ eigenclass = class << self ; self ; end
170
+ eigenclass.ancestors.include?( ModuleInstance_CascadeExtends ).should == true
171
+ end
172
+ AnotherModule_IncludeB = ::Module.new do
173
+ include AnotherModule_IncludeA
174
+ ancestors.include?( ModuleInstance_CascadeIncludes ).should == true
175
+ eigenclass = class << self ; self ; end
176
+ eigenclass.ancestors.include?( ModuleInstance_CascadeExtends ).should == true
177
+ end
178
+ AnotherModule_IncludeC = ::Module.new do
179
+ include AnotherModule_IncludeB
180
+ ancestors.include?( ModuleInstance_CascadeIncludes ).should == true
181
+ eigenclass = class << self ; self ; end
182
+ eigenclass.ancestors.include?( ModuleInstance_CascadeExtends ).should == true
183
+ end
184
+ AnotherModule_ClassInclude = ::Class.new do
185
+ include AnotherModule_IncludeC
186
+ ancestors.include?( ModuleInstance_CascadeIncludes ).should == true
187
+ eigenclass = class << self ; self ; end
188
+ eigenclass.ancestors.include?( ModuleInstance_CascadeExtends ).should == true
189
+ end
190
+
191
+ AnotherModule_ExtendA = ::Module.new do
192
+ extend ForInstance
193
+ eigenclass = class << self ; self ; end
194
+ eigenclass.ancestors.include?( ModuleInstance_CascadeExtends ).should == false
195
+ eigenclass.ancestors.include?( ModuleInstance_CascadeIncludes ).should == true
196
+ end
197
+ AnotherModule_ExtendB = ::Module.new do
198
+ extend AnotherModule_ExtendA
199
+ eigenclass = class << self ; self ; end
200
+ eigenclass.ancestors.include?( ModuleInstance_CascadeExtends ).should == false
201
+ end
202
+ AnotherModule_ExtendC = ::Module.new do
203
+ extend AnotherModule_ExtendB
204
+ eigenclass = class << self ; self ; end
205
+ eigenclass.ancestors.include?( ModuleInstance_CascadeExtends ).should == false
206
+ end
207
+ AnotherModule_ClassExtend = ::Class.new do
208
+ extend AnotherModule_ExtendC
209
+ eigenclass = class << self ; self ; end
210
+ eigenclass.ancestors.include?( ModuleInstance_CascadeExtends ).should == false
211
+ end
212
+
213
+ end
214
+ end
215
+
216
+ ##############################
217
+ # create_singleton_support #
218
+ # singleton_support #
219
+ ##############################
220
+
221
+ it 'can create a cascading support module for singleton (module/class) methods' do
222
+ module ::CascadingConfiguration::Core::InstanceController::CreateSingletonSupportMock
223
+
224
+ Encapsulation = ::CascadingConfiguration::Core::Module::DefaultEncapsulation
225
+
226
+ ForInstance = ::Module.new
227
+ InstanceController = ::CascadingConfiguration::Core::InstanceController.new( ForInstance )
228
+
229
+ singleton_support = InstanceController.create_singleton_support
230
+ InstanceController.singleton_support.should == singleton_support
231
+
232
+ end
233
+ end
234
+
235
+ #############################
236
+ # create_instance_support #
237
+ # instance_support #
238
+ #############################
239
+
240
+ it 'can create a cascading support module for instance methods' do
241
+ module ::CascadingConfiguration::Core::InstanceController::CreateInstanceSupportMock
242
+
243
+ Encapsulation = ::CascadingConfiguration::Core::Module::DefaultEncapsulation
244
+
245
+ ForInstance = ::Module.new
246
+ InstanceController = ::CascadingConfiguration::Core::InstanceController.new( ForInstance )
247
+
248
+ instance_support = InstanceController.create_instance_support
249
+ InstanceController.instance_support.should == instance_support
250
+
251
+ end
252
+ end
253
+
254
+ ###################################
255
+ # create_local_instance_support #
256
+ # local_instance_support #
257
+ ###################################
258
+
259
+ it 'can create a non-cascading support module supporting the local object and its instances' do
260
+ module ::CascadingConfiguration::Core::InstanceController::CreateLocalInstanceSupportMock
261
+
262
+ Encapsulation = ::CascadingConfiguration::Core::Module::DefaultEncapsulation
263
+
264
+ ForInstance = ::Module.new
265
+ InstanceController = ::CascadingConfiguration::Core::InstanceController.new( ForInstance )
266
+
267
+ local_instance_support = InstanceController.create_local_instance_support
268
+ InstanceController.local_instance_support.should == local_instance_support
269
+
270
+ end
271
+ end
272
+
273
+ end
@@ -0,0 +1,17 @@
1
+
2
+ require_relative '../../../../../lib/cascading_configuration.rb'
3
+
4
+ describe ::CascadingConfiguration::Core::Module::BlockConfigurations::CascadingVariables do
5
+
6
+ ############
7
+ # setter #
8
+ # getter #
9
+ ############
10
+
11
+
12
+ #####################
13
+ # instance_setter #
14
+ # instance_getter #
15
+ #####################
16
+
17
+ end
@@ -0,0 +1,127 @@
1
+
2
+ require_relative '../../../../../lib/cascading_configuration.rb'
3
+
4
+ describe ::CascadingConfiguration::Core::Module::ExtendedConfigurations::CompositingObjects do
5
+
6
+ ##############################
7
+ # initialize #
8
+ # compositing_object_class #
9
+ ##############################
10
+
11
+ it 'can initialize with a compositing object class' do
12
+ module ::CascadingConfiguration::Core::Module::ExtendedConfigurations::CompositingObjects::InitializeMock
13
+ ClassInstance = ::CascadingConfiguration::Core::Module::ExtendedConfigurations::CompositingObjects.new( :setting, ::CompositingArray, :default, '' )
14
+ CCM = ::Module.new do
15
+ ::CascadingConfiguration::Core.enable( self, ClassInstance )
16
+ end
17
+ CCM::ClassInstance.default_encapsulation.should == ::CascadingConfiguration::Core::Module::DefaultEncapsulation
18
+ CCM::ClassInstance.ccm_name.should == :setting
19
+ CCM::ClassInstance.ccm_aliases.should == [ '' ]
20
+ CCM::ClassInstance.compositing_object_class.should == ::CompositingArray
21
+ end
22
+ end
23
+
24
+ #####################################################
25
+ # create_configuration #
26
+ # initialize_compositing_configuration_for_parent #
27
+ #####################################################
28
+
29
+ it 'ensures objects are initialized for each level in hiearchy' do
30
+ module ::CascadingConfiguration::Core::Module::ExtendedConfigurations::CompositingObjects::CreateConfigurationMock
31
+
32
+ ClassInstance = ::CascadingConfiguration::Core::Module::ExtendedConfigurations::CompositingObjects.new( :setting, ::CompositingArray, :default, '' )
33
+ CCM = ::Module.new do
34
+ ::CascadingConfiguration::Core.enable( self, ClassInstance )
35
+ end
36
+
37
+ Encapsulation = ::CascadingConfiguration::Core::Module::DefaultEncapsulation
38
+
39
+ # module 1
40
+ Module1 = ::Module.new do
41
+ include CCM
42
+ attr_setting :some_configuration
43
+ end
44
+ Encapsulation.get_configuration( Module1, :some_configuration ).is_a?( ::CompositingArray ).should == true
45
+
46
+ # module 2
47
+ Module2 = ::Module.new do
48
+ include Module1
49
+ end
50
+ Encapsulation.get_configuration( Module2, :some_configuration ).is_a?( ::CompositingArray ).should == true
51
+
52
+ # module 3
53
+ Module3 = ::Module.new do
54
+ include Module2
55
+ end
56
+ Encapsulation.get_configuration( Module3, :some_configuration ).is_a?( ::CompositingArray ).should == true
57
+
58
+ # class 1
59
+ Class1 = ::Class.new do
60
+ include Module3
61
+ end
62
+ Encapsulation.get_configuration( Class1, :some_configuration ).is_a?( ::CompositingArray ).should == true
63
+
64
+ # subclass 1
65
+ Class2 = ::Class.new( Class1 )
66
+ Encapsulation.get_configuration( Class2, :some_configuration ).is_a?( ::CompositingArray ).should == true
67
+
68
+ # instance
69
+ Instance = Class2.new
70
+ Encapsulation.get_configuration( Instance, :some_configuration ).nil?.should == true
71
+ Instance.some_configuration.is_a?( ::CompositingArray ).should == true
72
+
73
+ RandomInstance = ::Object.new
74
+ Encapsulation.register_child_for_parent( RandomInstance, Instance )
75
+ Encapsulation.get_configuration( RandomInstance, :some_configuration ).is_a?( ::CompositingArray ).should == true
76
+
77
+ RandomInstance2 = ::Object.new
78
+ Encapsulation.register_child_for_parent( RandomInstance2, RandomInstance )
79
+ Encapsulation.get_configuration( RandomInstance2, :some_configuration ).is_a?( ::CompositingArray ).should == true
80
+
81
+ end
82
+
83
+ end
84
+
85
+ #####################
86
+ # setter #
87
+ # getter #
88
+ # instance_setter #
89
+ # instance_getter #
90
+ #####################
91
+
92
+ it 'can set and get values' do
93
+ module ::CascadingConfiguration::Core::Module::ExtendedConfigurations::CompositingObjects::SetterGetterMock
94
+
95
+ ClassInstance = ::CascadingConfiguration::Core::Module::ExtendedConfigurations::CompositingObjects.new( :setting, ::CompositingArray, :default, '' )
96
+ CCM = ::Module.new do
97
+ ::CascadingConfiguration::Core.enable( self, ClassInstance )
98
+ end
99
+
100
+ Encapsulation = ::CascadingConfiguration::Core::Module::DefaultEncapsulation
101
+
102
+ # module 1
103
+ Module1 = ::Module.new do
104
+ include CCM
105
+ attr_setting :some_configuration
106
+ self.some_configuration.should == [ ]
107
+ self.some_configuration.push( :some_value )
108
+ self.some_configuration.should == [ :some_value ]
109
+ self.some_configuration = [ :some_other_value ]
110
+ self.some_configuration.should == [ :some_other_value ]
111
+ end
112
+
113
+ Class1 = ::Class.new do
114
+ include Module1
115
+ end
116
+
117
+ Instance = Class1.new
118
+ Instance.some_configuration.should == [ :some_other_value ]
119
+ Instance.some_configuration.push( :some_value )
120
+ Instance.some_configuration.should == [ :some_other_value, :some_value ]
121
+ Instance.some_configuration = [ :some_other_value ]
122
+ Instance.some_configuration.should == [ :some_other_value ]
123
+
124
+ end
125
+ end
126
+
127
+ end
@@ -0,0 +1,37 @@
1
+
2
+ require_relative '../../../../lib/cascading_configuration.rb'
3
+
4
+ describe ::CascadingConfiguration::Core::Module::ExtendedConfigurations do
5
+
6
+ #############################
7
+ # parse_extension_modules #
8
+ #############################
9
+
10
+ it 'can parse extension modules from names' do
11
+ module ::CascadingConfiguration::Core::Module::ParseExtensionModulesMock
12
+ ForInstance = ::Module.new
13
+ InstanceController = ::CascadingConfiguration::Core::InstanceController.new( ForInstance )
14
+ Encapsulation = ::CascadingConfiguration::Core::Module::DefaultEncapsulation
15
+ CCM = ::CascadingConfiguration::Core::Module::ExtendedConfigurations.new( :setting, :default, '' )
16
+ module ModuleA
17
+ end
18
+ module ModuleB
19
+ end
20
+ module ModuleC
21
+ end
22
+ module ModuleD
23
+ end
24
+ names_modules = [ :name1, :name2, ModuleA, :name3, ModuleB, :name4, :name5, ModuleC, ModuleD, :name6 ]
25
+ names_modules_hash = CCM.class.parse_extension_modules( InstanceController, Encapsulation, *names_modules )
26
+ modules = [ ModuleA, ModuleB, ModuleC, ModuleD ]
27
+ names_modules_hash.should == { :name1 => modules,
28
+ :name2 => modules,
29
+ :name3 => modules,
30
+ :name4 => modules,
31
+ :name5 => modules,
32
+ :name6 => modules }
33
+ end
34
+ end
35
+
36
+
37
+ end
@@ -0,0 +1,87 @@
1
+
2
+ require_relative '../../../../lib/cascading_configuration.rb'
3
+
4
+ describe ::CascadingConfiguration::Core::Module::InheritingValues do
5
+
6
+ ########################################
7
+ # get_configuration_searching_upward #
8
+ ########################################
9
+
10
+ it 'can get the first defined configuration searching up the module configuration inheritance chain' do
11
+ module ::CascadingConfiguration::Core::Module::InheritingValues::GetConfigurationSearchingUpwardMock
12
+
13
+ Encapsulation = ::CascadingConfiguration::Core::Module::DefaultEncapsulation
14
+
15
+ CCM = ::CascadingConfiguration::Core::Module::InheritingValues.new( 'configuration' )
16
+
17
+ Instance_A = ::Module.new
18
+ Encapsulation.register_configuration( Instance_A, :some_configuration, CCM )
19
+ Instance_B = ::Module.new do
20
+ include Instance_A
21
+ end
22
+ Encapsulation.register_child_for_parent( Instance_B, Instance_A )
23
+ Encapsulation.register_configuration( Instance_B, :some_other_configuration, CCM )
24
+ Instance_C1 = ::Module.new do
25
+ include Instance_B
26
+ end
27
+ Encapsulation.register_child_for_parent( Instance_C1, Instance_B )
28
+ Encapsulation.register_configuration( Instance_C1, :yet_another_configuration, CCM )
29
+ Instance_C2 = ::Module.new do
30
+ include Instance_B
31
+ end
32
+ Encapsulation.register_child_for_parent( Instance_C2, Instance_B )
33
+ Instance_D = ::Module.new do
34
+ include Instance_C1
35
+ include Instance_C2
36
+ end
37
+ Encapsulation.register_child_for_parent( Instance_D, Instance_C1 )
38
+ Encapsulation.register_child_for_parent( Instance_D, Instance_C2 )
39
+
40
+ Encapsulation.set_configuration( Instance_A, :some_configuration, :some_value )
41
+ Encapsulation.set_configuration( Instance_B, :some_other_configuration, :some_other_value )
42
+
43
+ CCM.module_eval do
44
+ get_configuration_searching_upward( Encapsulation, Instance_B, :some_configuration ).should == :some_value
45
+ get_configuration_searching_upward( Encapsulation, Instance_B, :some_other_configuration ).should == :some_other_value
46
+ get_configuration_searching_upward( Encapsulation, Instance_C1, :some_configuration ).should == :some_value
47
+ get_configuration_searching_upward( Encapsulation, Instance_C1, :some_other_configuration ).should == :some_other_value
48
+ Encapsulation.set_configuration( Instance_C1, :yet_another_configuration, :another_value )
49
+ get_configuration_searching_upward( Encapsulation, Instance_C1, :yet_another_configuration ).should == :another_value
50
+ get_configuration_searching_upward( Encapsulation, Instance_C2, :some_configuration ).should == :some_value
51
+ get_configuration_searching_upward( Encapsulation, Instance_C2, :some_other_configuration ).should == :some_other_value
52
+ get_configuration_searching_upward( Encapsulation, Instance_D, :some_configuration ).should == :some_value
53
+ get_configuration_searching_upward( Encapsulation, Instance_D, :some_other_configuration ).should == :some_other_value
54
+ get_configuration_searching_upward( Encapsulation, Instance_D, :yet_another_configuration ).should == :another_value
55
+ end
56
+
57
+ end
58
+ end
59
+
60
+ #####################
61
+ # setter #
62
+ # getter #
63
+ # instance_setter #
64
+ # instance_getter #
65
+ #####################
66
+
67
+ it 'can set and get values' do
68
+ module ::CascadingConfiguration::Core::Module::InheritingValues::SetterGetterMock
69
+
70
+ Encapsulation = ::CascadingConfiguration::Core::Module::DefaultEncapsulation
71
+
72
+ ForInstance = ::Module.new
73
+ InstanceController = ::CascadingConfiguration::Core::InstanceController.new( ForInstance )
74
+
75
+ CCM = ::CascadingConfiguration::Core::Module::InheritingValues.new( 'configuration' )
76
+
77
+ CCM.method( :setter ).should == CCM.method( :instance_setter )
78
+ CCM.method( :getter ).should == CCM.method( :instance_getter )
79
+
80
+ CCM.getter( Encapsulation, ForInstance, :some_configuration ).should == nil
81
+ CCM.setter( Encapsulation, ForInstance, :some_configuration, :some_value )
82
+ CCM.getter( Encapsulation, ForInstance, :some_configuration ).should == :some_value
83
+
84
+ end
85
+ end
86
+
87
+ end