cascading_configuration 1.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 (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