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,746 @@
1
+
2
+ require_relative '../../../lib/cascading_configuration.rb'
3
+
4
+ describe CascadingConfiguration::Array::Unique do
5
+
6
+ #######################
7
+ # attr_unique_array #
8
+ #######################
9
+
10
+ it 'can define a configuration array, which is the primary interface' do
11
+
12
+ # possibilities:
13
+ # * module extended with setting
14
+ # => singleton gets attr_setting and configurations
15
+ # => including modules and classes get nothing
16
+ # => extending modules and classes get nothing
17
+ # => instances of including and extending classes get nothing
18
+ # * module included with setting
19
+ # => singleton gets attr_setting and configurations
20
+ # => including modules and classes get attr_setting and configurations
21
+ # => instances of including classes get configurations
22
+ # => extending modules and classes get attr_setting and configurations
23
+ # => instances of extending classes get nothing
24
+ module ::CascadingConfiguration::Array::Unique::ConfigurationMockModuleExtended
25
+ extend CascadingConfiguration::Array::Unique
26
+ # => singleton gets attr_setting and configurations
27
+ respond_to?( :attr_unique_array ).should == true
28
+ respond_to?( :attr_configuration_unique_array ).should == true
29
+ attr_unique_array :configuration_setting
30
+ respond_to?( :configuration_setting ).should == true
31
+ configuration_setting.should == []
32
+ configuration_setting.push( :a_configuration )
33
+ configuration_setting.should == [ :a_configuration ]
34
+ method_defined?( :configuration_setting ).should == false
35
+ instance_variables.empty?.should == true
36
+ # => including modules and classes get nothing
37
+ module SubmoduleIncluding
38
+ include CascadingConfiguration::Array::Unique::ConfigurationMockModuleExtended
39
+ method_defined?( :configuration_setting ).should == false
40
+ respond_to?( :configuration_setting ).should == false
41
+ instance_variables.empty?.should == true
42
+ end
43
+ # => extending modules and classes get nothing
44
+ module SubmoduleExtending
45
+ extend CascadingConfiguration::Array::Unique::ConfigurationMockModuleExtended
46
+ method_defined?( :configuration_setting ).should == false
47
+ respond_to?( :configuration_setting ).should == false
48
+ instance_variables.empty?.should == true
49
+ end
50
+ # => instances of including and extending classes get nothing
51
+ class ClassIncluding
52
+ include CascadingConfiguration::Array::Unique::ConfigurationMockModuleExtended
53
+ method_defined?( :configuration_setting ).should == false
54
+ respond_to?( :configuration_setting ).should == false
55
+ instance_variables.empty?.should == true
56
+ end
57
+ class ClassExtending
58
+ extend CascadingConfiguration::Array::Unique::ConfigurationMockModuleExtended
59
+ method_defined?( :configuration_setting ).should == false
60
+ respond_to?( :configuration_setting ).should == false
61
+ instance_variables.empty?.should == true
62
+ end
63
+ end
64
+
65
+ # * module included with setting
66
+ module ::CascadingConfiguration::Array::Unique::ConfigurationMockModuleIncluded
67
+ include CascadingConfiguration::Array::Unique
68
+ # => singleton gets attr_setting and configurations
69
+ respond_to?( :attr_unique_array ).should == true
70
+ attr_unique_array :configuration_setting
71
+ respond_to?( :configuration_setting ).should == true
72
+ configuration_setting.should == []
73
+ configuration_setting.push( :a_configuration )
74
+ configuration_setting.should == [ :a_configuration ]
75
+ method_defined?( :configuration_setting ).should == true
76
+ instance_variables.empty?.should == true
77
+ # => including modules and classes get attr_setting and configurations
78
+ module SubmoduleIncluding
79
+ include CascadingConfiguration::Array::Unique::ConfigurationMockModuleIncluded
80
+ method_defined?( :configuration_setting ).should == true
81
+ respond_to?( :configuration_setting ).should == true
82
+ configuration_setting.should == [ :a_configuration ]
83
+ configuration_setting.push( :another_configuration )
84
+ configuration_setting.push( :another_configuration )
85
+ configuration_setting.should == [ :a_configuration, :another_configuration ]
86
+ instance_variables.empty?.should == true
87
+ end
88
+ # => extending modules and classes get attr_setting and configurations
89
+ module SubmoduleExtending
90
+ extend CascadingConfiguration::Array::Unique::ConfigurationMockModuleIncluded
91
+ # if we're extended then we want to use the eigenclass ancestor chain
92
+ # - the first ancestor will be the extending module
93
+ # - the rest of the ancestors will be the extending module's include chain
94
+ respond_to?( :configuration_setting ).should == true
95
+ configuration_setting.should == [ :a_configuration ]
96
+ configuration_setting.push( :some_other_configuration )
97
+ configuration_setting.push( :some_other_configuration )
98
+ configuration_setting.push( :some_other_configuration )
99
+ configuration_setting.should == [ :a_configuration, :some_other_configuration ]
100
+ method_defined?( :configuration_setting ).should == false
101
+ instance_variables.empty?.should == true
102
+ end
103
+ # => instances of including classes get configurations
104
+ class ClassIncluding
105
+ include CascadingConfiguration::Array::Unique::ConfigurationMockModuleIncluded
106
+ method_defined?( :configuration_setting ).should == true
107
+ respond_to?( :configuration_setting ).should == true
108
+ configuration_setting.should == [ :a_configuration ]
109
+ configuration_setting.push( :some_other_configuration )
110
+ configuration_setting.should == [ :a_configuration, :some_other_configuration ]
111
+ instance_variables.empty?.should == true
112
+ end
113
+ setting_class_including_instance = ClassIncluding.new
114
+ setting_class_including_instance.respond_to?( :configuration_setting ).should == true
115
+ setting_class_including_instance.configuration_setting.should == [ :a_configuration, :some_other_configuration ]
116
+ setting_class_including_instance.configuration_setting.delete( :some_other_configuration )
117
+ setting_class_including_instance.configuration_setting = [ :our_setting_value ]
118
+ setting_class_including_instance.configuration_setting.should == [ :our_setting_value ]
119
+ setting_class_including_instance.instance_variables.empty?.should == true
120
+ # => instances of extending classes get nothing
121
+ class ClassExtending
122
+ extend CascadingConfiguration::Array::Unique::ConfigurationMockModuleIncluded
123
+ respond_to?( :configuration_setting ).should == true
124
+ configuration_setting.should == [ :a_configuration ]
125
+ configuration_setting.push( :some_other_configuration )
126
+ configuration_setting.should == [ :a_configuration, :some_other_configuration ]
127
+ instance_variables.empty?.should == true
128
+ end
129
+ setting_class_including_instance = ClassExtending.new
130
+ setting_class_including_instance.respond_to?( :configuration_setting ).should == false
131
+ setting_class_including_instance.instance_variables.empty?.should == true
132
+ end
133
+
134
+ class CascadingConfiguration::Array::Unique::ConfigurationMockClass
135
+ include CascadingConfiguration::Array::Unique::ConfigurationMockModuleIncluded::SubmoduleIncluding
136
+ configuration_setting.should == [ :a_configuration, :another_configuration ]
137
+ configuration_setting.push( :some_other_configuration )
138
+ configuration_setting.push( :some_other_configuration )
139
+ configuration_setting.should == [ :a_configuration, :another_configuration, :some_other_configuration ]
140
+ instance_variables.empty?.should == true
141
+ end
142
+ object_instance_one = CascadingConfiguration::Array::Unique::ConfigurationMockClass.new
143
+ object_instance_one.configuration_setting.should == [ :a_configuration, :another_configuration, :some_other_configuration ]
144
+ object_instance_one.configuration_setting.delete( :a_configuration )
145
+ object_instance_one.configuration_setting.should == [ :another_configuration, :some_other_configuration ]
146
+ object_instance_one.instance_variables.empty?.should == true
147
+ class CascadingConfiguration::Array::Unique::ConfigurationMockClassSub1 < CascadingConfiguration::Array::Unique::ConfigurationMockClass
148
+ configuration_setting.should == [ :a_configuration, :another_configuration, :some_other_configuration ]
149
+ configuration_setting.delete( :a_configuration )
150
+ configuration_setting.should == [ :another_configuration, :some_other_configuration ]
151
+ instance_variables.empty?.should == true
152
+ end
153
+ object_instance_two = CascadingConfiguration::Array::Unique::ConfigurationMockClassSub1.new
154
+ object_instance_two.configuration_setting.should == [ :another_configuration, :some_other_configuration ]
155
+ object_instance_two.configuration_setting.delete( :another_configuration )
156
+ object_instance_two.configuration_setting.should == [ :some_other_configuration ]
157
+ object_instance_two.instance_variables.empty?.should == true
158
+ class CascadingConfiguration::Array::Unique::ConfigurationMockClassSub2 < CascadingConfiguration::Array::Unique::ConfigurationMockClassSub1
159
+ configuration_setting.should == [ :another_configuration, :some_other_configuration ]
160
+ #configuration_setting.push( :yet_another_configuration )
161
+ #configuration_setting.should == [ :another_configuration, :some_other_configuration, :yet_another_configuration ]
162
+ instance_variables.empty?.should == true
163
+ end
164
+
165
+ # change ancestor setting
166
+ CascadingConfiguration::Array::Unique::ConfigurationMockClass.configuration_setting.should == [ :a_configuration, :another_configuration, :some_other_configuration ]
167
+ CascadingConfiguration::Array::Unique::ConfigurationMockClass.configuration_setting.push( :a_yet_unused_configuration )
168
+ CascadingConfiguration::Array::Unique::ConfigurationMockClass.configuration_setting.should == [ :a_configuration, :another_configuration, :some_other_configuration, :a_yet_unused_configuration ]
169
+ object_instance_one.configuration_setting.should == [ :another_configuration, :some_other_configuration, :a_yet_unused_configuration ]
170
+ CascadingConfiguration::Array::Unique::ConfigurationMockClassSub1.configuration_setting.should == [ :another_configuration, :some_other_configuration, :a_yet_unused_configuration ]
171
+ object_instance_two.configuration_setting.should == [ :some_other_configuration, :a_yet_unused_configuration ]
172
+
173
+ # freeze ancestor setting
174
+ object_instance_one.configuration_setting.freeze!
175
+ object_instance_one.configuration_setting.should == [ :another_configuration, :some_other_configuration, :a_yet_unused_configuration ]
176
+ CascadingConfiguration::Array::Unique::ConfigurationMockClassSub1.configuration_setting.freeze!
177
+ CascadingConfiguration::Array::Unique::ConfigurationMockClassSub1.configuration_setting.should == [ :another_configuration, :some_other_configuration, :a_yet_unused_configuration ]
178
+ CascadingConfiguration::Array::Unique::ConfigurationMockClass.configuration_setting.push( :non_cascading_configuration )
179
+ CascadingConfiguration::Array::Unique::ConfigurationMockClass.configuration_setting.should == [ :a_configuration, :another_configuration, :some_other_configuration, :a_yet_unused_configuration, :non_cascading_configuration ]
180
+ object_instance_one.configuration_setting.should == [ :another_configuration, :some_other_configuration, :a_yet_unused_configuration ]
181
+ CascadingConfiguration::Array::Unique::ConfigurationMockClassSub1.configuration_setting.should == [ :another_configuration, :some_other_configuration, :a_yet_unused_configuration ]
182
+ object_instance_two.configuration_setting.should == [ :some_other_configuration, :a_yet_unused_configuration ]
183
+
184
+ end
185
+
186
+ ##############################
187
+ # attr_module_unique_array #
188
+ # attr_class_unique_array #
189
+ ##############################
190
+
191
+ it 'can define a class configuration array, which will not cascade to instances' do
192
+
193
+ # possibilities:
194
+ # * module extended with setting
195
+ # => singleton gets attr_setting and configurations
196
+ # => including modules and classes get nothing
197
+ # => extending modules and classes get nothing
198
+ # => instances of including and extending classes get nothing
199
+ # * module included with setting
200
+ # => singleton gets attr_setting and configurations
201
+ # => including modules and classes get attr_setting and configurations
202
+ # => instances of including classes get configurations
203
+ # => extending modules and classes get attr_setting and configurations
204
+ # => instances of extending classes get nothing
205
+ module ::CascadingConfiguration::Array::Unique::ClassConfigurationMockModuleExtended
206
+ extend CascadingConfiguration::Array::Unique
207
+ # => singleton gets attr_setting and configurations
208
+ respond_to?( :attr_module_configuration_unique_array ).should == true
209
+ respond_to?( :attr_module_unique_array ).should == true
210
+ method( :attr_module_unique_array ).should == method( :attr_class_unique_array )
211
+ attr_module_unique_array :configuration_setting
212
+ respond_to?( :configuration_setting ).should == true
213
+ configuration_setting.should == []
214
+ configuration_setting.push( :a_configuration )
215
+ configuration_setting.should == [ :a_configuration ]
216
+ method_defined?( :configuration_setting ).should == false
217
+ instance_variables.empty?.should == true
218
+ # => including modules and classes get nothing
219
+ module SubmoduleIncluding
220
+ include CascadingConfiguration::Array::Unique::ClassConfigurationMockModuleExtended
221
+ method_defined?( :configuration_setting ).should == false
222
+ respond_to?( :configuration_setting ).should == false
223
+ instance_variables.empty?.should == true
224
+ end
225
+ # => extending modules and classes get nothing
226
+ module SubmoduleExtending
227
+ extend CascadingConfiguration::Array::Unique::ClassConfigurationMockModuleExtended
228
+ method_defined?( :configuration_setting ).should == false
229
+ respond_to?( :configuration_setting ).should == false
230
+ instance_variables.empty?.should == true
231
+ end
232
+ # => instances of including and extending classes get nothing
233
+ class ClassIncluding
234
+ include CascadingConfiguration::Array::Unique::ClassConfigurationMockModuleExtended
235
+ method_defined?( :configuration_setting ).should == false
236
+ respond_to?( :configuration_setting ).should == false
237
+ instance_variables.empty?.should == true
238
+ end
239
+ class ClassExtending
240
+ extend CascadingConfiguration::Array::Unique::ClassConfigurationMockModuleExtended
241
+ method_defined?( :configuration_setting ).should == false
242
+ respond_to?( :configuration_setting ).should == false
243
+ instance_variables.empty?.should == true
244
+ end
245
+ end
246
+
247
+ # * module included with setting
248
+ module ::CascadingConfiguration::Array::Unique::ClassConfigurationMockModuleIncluded
249
+ include CascadingConfiguration::Array::Unique
250
+ # => singleton gets attr_setting and configurations
251
+ respond_to?( :attr_module_unique_array ).should == true
252
+ attr_module_unique_array :configuration_setting
253
+ respond_to?( :configuration_setting ).should == true
254
+ configuration_setting.should == []
255
+ configuration_setting.push( :a_configuration )
256
+ configuration_setting.should == [ :a_configuration ]
257
+ method_defined?( :configuration_setting ).should == false
258
+ instance_variables.empty?.should == true
259
+ # => including modules and classes get attr_setting and configurations
260
+ module SubmoduleIncluding
261
+ include CascadingConfiguration::Array::Unique::ClassConfigurationMockModuleIncluded
262
+ method_defined?( :configuration_setting ).should == false
263
+ respond_to?( :configuration_setting ).should == true
264
+ configuration_setting.should == [ :a_configuration ]
265
+ configuration_setting.push( :another_configuration )
266
+ configuration_setting.should == [ :a_configuration, :another_configuration ]
267
+ method_defined?( :configuration_setting ).should == false
268
+ instance_variables.empty?.should == true
269
+ end
270
+ # => extending modules and classes get attr_setting and configurations
271
+ module SubmoduleExtending
272
+ extend CascadingConfiguration::Array::Unique::ClassConfigurationMockModuleIncluded
273
+ # if we're extended then we want to use the eigenclass ancestor chain
274
+ # - the first ancestor will be the extending module
275
+ # - the rest of the ancestors will be the extending module's include chain
276
+ respond_to?( :configuration_setting ).should == false
277
+ method_defined?( :configuration_setting ).should == false
278
+ instance_variables.empty?.should == true
279
+ end
280
+ # => instances of including classes get configurations
281
+ class ClassIncluding
282
+ include CascadingConfiguration::Array::Unique::ClassConfigurationMockModuleIncluded
283
+ method_defined?( :configuration_setting ).should == false
284
+ respond_to?( :configuration_setting ).should == true
285
+ configuration_setting.should == [ :a_configuration ]
286
+ configuration_setting.push( :some_other_configuration )
287
+ configuration_setting.should == [ :a_configuration, :some_other_configuration ]
288
+ instance_variables.empty?.should == true
289
+ end
290
+ setting_class_including_instance = ClassIncluding.new
291
+ setting_class_including_instance.respond_to?( :configuration_setting ).should == false
292
+ setting_class_including_instance.instance_variables.empty?.should == true
293
+ # => instances of extending classes get nothing
294
+ class ClassExtending
295
+ extend CascadingConfiguration::Array::Unique::ClassConfigurationMockModuleIncluded
296
+ method_defined?( :configuration_setting ).should == false
297
+ respond_to?( :configuration_setting ).should == false
298
+ instance_variables.empty?.should == true
299
+ end
300
+ setting_class_including_instance = ClassExtending.new
301
+ setting_class_including_instance.respond_to?( :configuration_setting ).should == false
302
+ setting_class_including_instance.instance_variables.empty?.should == true
303
+ end
304
+
305
+ class CascadingConfiguration::Array::Unique::ClassConfigurationMockClass
306
+ include CascadingConfiguration::Array::Unique::ClassConfigurationMockModuleIncluded::SubmoduleIncluding
307
+ method_defined?( :configuration_setting ).should == false
308
+ configuration_setting.should == [ :a_configuration, :another_configuration ]
309
+ configuration_setting.push( :some_other_configuration )
310
+ configuration_setting.should == [ :a_configuration, :another_configuration, :some_other_configuration ]
311
+ instance_variables.empty?.should == true
312
+ end
313
+ object_instance_one = CascadingConfiguration::Array::Unique::ClassConfigurationMockClass.new
314
+ object_instance_one.respond_to?( :configuration_setting ).should == false
315
+ object_instance_one.instance_variables.empty?.should == true
316
+ class CascadingConfiguration::Array::Unique::ClassConfigurationMockClassSub1 < CascadingConfiguration::Array::Unique::ClassConfigurationMockClass
317
+ method_defined?( :configuration_setting ).should == false
318
+ configuration_setting.should == [ :a_configuration, :another_configuration, :some_other_configuration ]
319
+ configuration_setting.delete( :a_configuration )
320
+ configuration_setting.should == [ :another_configuration, :some_other_configuration ]
321
+ instance_variables.empty?.should == true
322
+ end
323
+ object_instance_two = CascadingConfiguration::Array::Unique::ClassConfigurationMockClassSub1.new
324
+ object_instance_two.respond_to?( :configuration_setting ).should == false
325
+ object_instance_two.instance_variables.empty?.should == true
326
+ class CascadingConfiguration::Array::Unique::ClassConfigurationMockClassSub2 < CascadingConfiguration::Array::Unique::ClassConfigurationMockClassSub1
327
+ method_defined?( :configuration_setting ).should == false
328
+ configuration_setting.should == [ :another_configuration, :some_other_configuration ]
329
+ configuration_setting.push( :yet_another_configuration )
330
+ configuration_setting.should == [ :another_configuration, :some_other_configuration, :yet_another_configuration ]
331
+ instance_variables.empty?.should == true
332
+ end
333
+
334
+ # change ancestor setting
335
+ CascadingConfiguration::Array::Unique::ClassConfigurationMockClass.configuration_setting.should == [ :a_configuration, :another_configuration, :some_other_configuration ]
336
+ CascadingConfiguration::Array::Unique::ClassConfigurationMockClass.configuration_setting.push( :a_yet_unused_configuration )
337
+ CascadingConfiguration::Array::Unique::ClassConfigurationMockClass.configuration_setting.should == [ :a_configuration, :another_configuration, :some_other_configuration, :a_yet_unused_configuration ]
338
+ CascadingConfiguration::Array::Unique::ClassConfigurationMockClassSub1.configuration_setting.should == [ :another_configuration, :some_other_configuration, :a_yet_unused_configuration ]
339
+
340
+ # freeze ancestor setting
341
+ CascadingConfiguration::Array::Unique::ClassConfigurationMockClassSub1.configuration_setting.freeze!
342
+ CascadingConfiguration::Array::Unique::ClassConfigurationMockClassSub1.configuration_setting.should == [ :another_configuration, :some_other_configuration, :a_yet_unused_configuration ]
343
+ CascadingConfiguration::Array::Unique::ClassConfigurationMockClass.configuration_setting.push( :non_cascading_configuration )
344
+ CascadingConfiguration::Array::Unique::ClassConfigurationMockClass.configuration_setting.should == [ :a_configuration, :another_configuration, :some_other_configuration, :a_yet_unused_configuration, :non_cascading_configuration ]
345
+ CascadingConfiguration::Array::Unique::ClassConfigurationMockClassSub1.configuration_setting.should == [ :another_configuration, :some_other_configuration, :a_yet_unused_configuration ]
346
+
347
+ end
348
+
349
+ #############################
350
+ # attr_local_unique_array #
351
+ #############################
352
+
353
+ it 'can define a local configuration array, which will not cascade' do
354
+
355
+ # possibilities:
356
+ # * module extended with setting
357
+ # => singleton gets attr_setting and configurations
358
+ # => including modules and classes get nothing
359
+ # => extending modules and classes get nothing
360
+ # => instances of including and extending classes get nothing
361
+ # * module included with setting
362
+ # => singleton gets attr_setting and configurations
363
+ # => including modules and classes get attr_setting and configurations
364
+ # => instances of including classes get configurations
365
+ # => extending modules and classes get attr_setting and configurations
366
+ # => instances of extending classes get nothing
367
+ module ::CascadingConfiguration::Array::Unique::LocalConfigurationMockModuleExtended
368
+ extend CascadingConfiguration::Array::Unique
369
+ # => singleton gets attr_setting and configurations
370
+ respond_to?( :attr_local_configuration_unique_array ).should == true
371
+ respond_to?( :attr_local_unique_array ).should == true
372
+ attr_local_unique_array :configuration_setting
373
+ respond_to?( :configuration_setting ).should == true
374
+ configuration_setting.should == []
375
+ configuration_setting.push( :a_configuration )
376
+ configuration_setting.should == [ :a_configuration ]
377
+ method_defined?( :configuration_setting ).should == false
378
+ instance_variables.empty?.should == true
379
+ # => including modules and classes get nothing
380
+ module SubmoduleIncluding
381
+ include CascadingConfiguration::Array::Unique::LocalConfigurationMockModuleExtended
382
+ method_defined?( :configuration_setting ).should == false
383
+ respond_to?( :configuration_setting ).should == false
384
+ instance_variables.empty?.should == true
385
+ end
386
+ # => extending modules and classes get nothing
387
+ module SubmoduleExtending
388
+ extend CascadingConfiguration::Array::Unique::LocalConfigurationMockModuleExtended
389
+ method_defined?( :configuration_setting ).should == false
390
+ respond_to?( :configuration_setting ).should == false
391
+ instance_variables.empty?.should == true
392
+ end
393
+ # => instances of including and extending classes get nothing
394
+ class ClassIncluding
395
+ include CascadingConfiguration::Array::Unique::LocalConfigurationMockModuleExtended
396
+ method_defined?( :configuration_setting ).should == false
397
+ respond_to?( :configuration_setting ).should == false
398
+ instance_variables.empty?.should == true
399
+ end
400
+ class ClassExtending
401
+ extend CascadingConfiguration::Array::Unique::LocalConfigurationMockModuleExtended
402
+ method_defined?( :configuration_setting ).should == false
403
+ respond_to?( :configuration_setting ).should == false
404
+ instance_variables.empty?.should == true
405
+ end
406
+ end
407
+
408
+ # * module included with setting
409
+ module ::CascadingConfiguration::Array::Unique::LocalConfigurationMockModuleIncluded
410
+ include CascadingConfiguration::Array::Unique
411
+ # => singleton gets attr_setting and configurations
412
+ respond_to?( :attr_local_unique_array ).should == true
413
+ attr_local_unique_array :configuration_setting
414
+ respond_to?( :configuration_setting ).should == true
415
+ configuration_setting.should == []
416
+ configuration_setting.push( :a_configuration )
417
+ configuration_setting.should == [ :a_configuration ]
418
+ method_defined?( :configuration_setting ).should == true
419
+ instance_variables.empty?.should == true
420
+ # => including modules and classes get attr_setting and configurations
421
+ module SubmoduleIncluding
422
+ include CascadingConfiguration::Array::Unique::LocalConfigurationMockModuleIncluded
423
+ method_defined?( :configuration_setting ).should == true
424
+ respond_to?( :configuration_setting ).should == false
425
+ instance_variables.empty?.should == true
426
+ end
427
+ # => extending modules and classes get attr_setting and configurations
428
+ module SubmoduleExtending
429
+ extend CascadingConfiguration::Array::Unique::LocalConfigurationMockModuleIncluded
430
+ # if we're extended then we want to use the eigenclass ancestor chain
431
+ # - the first ancestor will be the extending module
432
+ # - the rest of the ancestors will be the extending module's include chain
433
+ respond_to?( :configuration_setting ).should == true
434
+ method_defined?( :configuration_setting ).should == false
435
+ instance_variables.empty?.should == true
436
+ end
437
+ # => instances of including classes get configurations
438
+ class ClassIncluding
439
+ include CascadingConfiguration::Array::Unique::LocalConfigurationMockModuleIncluded
440
+ method_defined?( :configuration_setting ).should == true
441
+ respond_to?( :configuration_setting ).should == false
442
+ instance_variables.empty?.should == true
443
+ end
444
+ setting_class_including_instance = ClassIncluding.new
445
+ setting_class_including_instance.respond_to?( :configuration_setting ).should == true
446
+ setting_class_including_instance.instance_variables.empty?.should == true
447
+ # => instances of extending classes get nothing
448
+ class ClassExtending
449
+ extend CascadingConfiguration::Array::Unique::LocalConfigurationMockModuleIncluded
450
+ method_defined?( :configuration_setting ).should == false
451
+ respond_to?( :configuration_setting ).should == true
452
+ instance_variables.empty?.should == true
453
+ end
454
+ setting_class_including_instance = ClassExtending.new
455
+ setting_class_including_instance.respond_to?( :configuration_setting ).should == false
456
+ setting_class_including_instance.instance_variables.empty?.should == true
457
+ end
458
+
459
+ class CascadingConfiguration::Array::Unique::LocalConfigurationMockClass
460
+ include CascadingConfiguration::Array::Unique::LocalConfigurationMockModuleIncluded::SubmoduleIncluding
461
+ method_defined?( :configuration_setting ).should == true
462
+ respond_to?( :configuration_setting ).should == false
463
+ instance_variables.empty?.should == true
464
+ end
465
+ object_instance_one = CascadingConfiguration::Array::Unique::LocalConfigurationMockClass.new
466
+ object_instance_one.respond_to?( :configuration_setting ).should == true
467
+ object_instance_one.instance_variables.empty?.should == true
468
+ class CascadingConfiguration::Array::Unique::LocalConfigurationMockClassSub1 < CascadingConfiguration::Array::Unique::LocalConfigurationMockClass
469
+ method_defined?( :configuration_setting ).should == true
470
+ respond_to?( :configuration_setting ).should == false
471
+ instance_variables.empty?.should == true
472
+ end
473
+ object_instance_two = CascadingConfiguration::Array::Unique::LocalConfigurationMockClassSub1.new
474
+ object_instance_two.respond_to?( :configuration_setting ).should == true
475
+ object_instance_two.instance_variables.empty?.should == true
476
+ class CascadingConfiguration::Array::Unique::LocalConfigurationMockClassSub2 < CascadingConfiguration::Array::Unique::LocalConfigurationMockClassSub1
477
+ method_defined?( :configuration_setting ).should == true
478
+ respond_to?( :configuration_setting ).should == false
479
+ instance_variables.empty?.should == true
480
+ end
481
+
482
+ end
483
+
484
+ ################################
485
+ # attr_instance_unique_array #
486
+ ################################
487
+
488
+ it 'can define an instance configuration array, which will not cascade' do
489
+
490
+ # possibilities:
491
+ # * module extended with setting
492
+ # => singleton gets attr_setting and configurations
493
+ # => including modules and classes get nothing
494
+ # => extending modules and classes get nothing
495
+ # => instances of including and extending classes get nothing
496
+ # * module included with setting
497
+ # => singleton gets attr_setting and configurations
498
+ # => including modules and classes get attr_setting and configurations
499
+ # => instances of including classes get configurations
500
+ # => extending modules and classes get attr_setting and configurations
501
+ # => instances of extending classes get nothing
502
+ module ::CascadingConfiguration::Array::Unique::InstanceConfigurationMockModuleExtended
503
+ extend CascadingConfiguration::Array::Unique
504
+ # => singleton gets attr_setting and configurations
505
+ instance_variables.empty?.should == true
506
+ # => including modules and classes get nothing
507
+ module SubmoduleIncluding
508
+ include CascadingConfiguration::Array::Unique::InstanceConfigurationMockModuleExtended
509
+ method_defined?( :configuration_setting ).should == false
510
+ respond_to?( :configuration_setting ).should == false
511
+ instance_variables.empty?.should == true
512
+ end
513
+ # => extending modules and classes get nothing
514
+ module SubmoduleExtending
515
+ extend CascadingConfiguration::Array::Unique::InstanceConfigurationMockModuleExtended
516
+ method_defined?( :configuration_setting ).should == false
517
+ respond_to?( :configuration_setting ).should == false
518
+ instance_variables.empty?.should == true
519
+ end
520
+ # => instances of including and extending classes get nothing
521
+ class ClassIncluding
522
+ include CascadingConfiguration::Array::Unique::InstanceConfigurationMockModuleExtended
523
+ method_defined?( :configuration_setting ).should == false
524
+ respond_to?( :configuration_setting ).should == false
525
+ instance_variables.empty?.should == true
526
+ end
527
+ class ClassExtending
528
+ extend CascadingConfiguration::Array::Unique::InstanceConfigurationMockModuleExtended
529
+ method_defined?( :configuration_setting ).should == false
530
+ respond_to?( :configuration_setting ).should == false
531
+ instance_variables.empty?.should == true
532
+ end
533
+ end
534
+
535
+ # * module included with setting
536
+ module ::CascadingConfiguration::Array::Unique::InstanceConfigurationMockModuleIncluded
537
+ include CascadingConfiguration::Array::Unique
538
+ # => singleton gets attr_setting and configurations
539
+ respond_to?( :attr_instance_unique_array ).should == true
540
+ attr_instance_unique_array :configuration_setting
541
+ respond_to?( :configuration_setting ).should == false
542
+ method_defined?( :configuration_setting ).should == true
543
+ instance_variables.empty?.should == true
544
+ # => including modules and classes get attr_setting and configurations
545
+ module SubmoduleIncluding
546
+ include CascadingConfiguration::Array::Unique::InstanceConfigurationMockModuleIncluded
547
+ method_defined?( :configuration_setting ).should == true
548
+ respond_to?( :configuration_setting ).should == false
549
+ method_defined?( :configuration_setting ).should == true
550
+ instance_variables.empty?.should == true
551
+ end
552
+ # => extending modules and classes get attr_setting and configurations
553
+ module SubmoduleExtending
554
+ extend CascadingConfiguration::Array::Unique::InstanceConfigurationMockModuleIncluded
555
+ # if we're extended then we want to use the eigenclass ancestor chain
556
+ # - the first ancestor will be the extending module
557
+ # - the rest of the ancestors will be the extending module's include chain
558
+ respond_to?( :configuration_setting ).should == true
559
+ method_defined?( :configuration_setting ).should == false
560
+ instance_variables.empty?.should == true
561
+ end
562
+ # => instances of including classes get configurations
563
+ class ClassIncluding
564
+ include CascadingConfiguration::Array::Unique::InstanceConfigurationMockModuleIncluded
565
+ method_defined?( :configuration_setting ).should == true
566
+ respond_to?( :configuration_setting ).should == false
567
+ instance_variables.empty?.should == true
568
+ end
569
+ setting_class_including_instance = ClassIncluding.new
570
+ setting_class_including_instance.respond_to?( :configuration_setting ).should == true
571
+ setting_class_including_instance.instance_variables.empty?.should == true
572
+ # => instances of extending classes get nothing
573
+ class ClassExtending
574
+ extend CascadingConfiguration::Array::Unique::InstanceConfigurationMockModuleIncluded
575
+ method_defined?( :configuration_setting ).should == false
576
+ respond_to?( :configuration_setting ).should == true
577
+ instance_variables.empty?.should == true
578
+ end
579
+ setting_class_including_instance = ClassExtending.new
580
+ setting_class_including_instance.respond_to?( :configuration_setting ).should == false
581
+ setting_class_including_instance.instance_variables.empty?.should == true
582
+ end
583
+
584
+ class CascadingConfiguration::Array::Unique::InstanceConfigurationMockClass
585
+ include CascadingConfiguration::Array::Unique::InstanceConfigurationMockModuleIncluded::SubmoduleIncluding
586
+ method_defined?( :configuration_setting ).should == true
587
+ respond_to?( :configuration_setting ).should == false
588
+ instance_variables.empty?.should == true
589
+ end
590
+ object_instance_one = CascadingConfiguration::Array::Unique::InstanceConfigurationMockClass.new
591
+ object_instance_one.respond_to?( :configuration_setting ).should == true
592
+ object_instance_one.instance_variables.empty?.should == true
593
+ class CascadingConfiguration::Array::Unique::InstanceConfigurationMockClassSub1 < CascadingConfiguration::Array::Unique::InstanceConfigurationMockClass
594
+ method_defined?( :configuration_setting ).should == true
595
+ respond_to?( :configuration_setting ).should == false
596
+ instance_variables.empty?.should == true
597
+ end
598
+ object_instance_two = CascadingConfiguration::Array::Unique::InstanceConfigurationMockClassSub1.new
599
+ object_instance_two.respond_to?( :configuration_setting ).should == true
600
+ object_instance_two.instance_variables.empty?.should == true
601
+ class CascadingConfiguration::Array::Unique::InstanceConfigurationMockClassSub2 < CascadingConfiguration::Array::Unique::InstanceConfigurationMockClassSub1
602
+ method_defined?( :configuration_setting ).should == true
603
+ respond_to?( :configuration_setting ).should == false
604
+ instance_variables.empty?.should == true
605
+ end
606
+
607
+ end
608
+
609
+
610
+ ##############################
611
+ # attr_object_unique_array #
612
+ ##############################
613
+
614
+ it 'can define an object configuration array, which will not cascade' do
615
+
616
+ # possibilities:
617
+ # * module extended with setting
618
+ # => singleton gets attr_setting and configurations
619
+ # => including modules and classes get nothing
620
+ # => extending modules and classes get nothing
621
+ # => instances of including and extending classes get nothing
622
+ # * module included with setting
623
+ # => singleton gets attr_setting and configurations
624
+ # => including modules and classes get attr_setting and configurations
625
+ # => instances of including classes get configurations
626
+ # => extending modules and classes get attr_setting and configurations
627
+ # => instances of extending classes get nothing
628
+ module ::CascadingConfiguration::Array::Unique::ObjectConfigurationMockModuleExtended
629
+ extend CascadingConfiguration::Array::Unique
630
+ # => singleton gets attr_setting and configurations
631
+ respond_to?( :attr_object_configuration_unique_array ).should == true
632
+ respond_to?( :attr_object_unique_array ).should == true
633
+ attr_object_unique_array :configuration_setting
634
+ respond_to?( :configuration_setting ).should == true
635
+ configuration_setting.should == []
636
+ configuration_setting.push( :a_configuration )
637
+ configuration_setting.should == [ :a_configuration ]
638
+ method_defined?( :configuration_setting ).should == false
639
+ instance_variables.empty?.should == true
640
+ # => including modules and classes get nothing
641
+ module SubmoduleIncluding
642
+ include CascadingConfiguration::Array::Unique::ObjectConfigurationMockModuleExtended
643
+ method_defined?( :configuration_setting ).should == false
644
+ respond_to?( :configuration_setting ).should == false
645
+ instance_variables.empty?.should == true
646
+ end
647
+ # => extending modules and classes get nothing
648
+ module SubmoduleExtending
649
+ extend CascadingConfiguration::Array::Unique::ObjectConfigurationMockModuleExtended
650
+ method_defined?( :configuration_setting ).should == false
651
+ respond_to?( :configuration_setting ).should == false
652
+ instance_variables.empty?.should == true
653
+ end
654
+ # => instances of including and extending classes get nothing
655
+ class ClassIncluding
656
+ include CascadingConfiguration::Array::Unique::ObjectConfigurationMockModuleExtended
657
+ method_defined?( :configuration_setting ).should == false
658
+ respond_to?( :configuration_setting ).should == false
659
+ instance_variables.empty?.should == true
660
+ end
661
+ class ClassExtending
662
+ extend CascadingConfiguration::Array::Unique::ObjectConfigurationMockModuleExtended
663
+ method_defined?( :configuration_setting ).should == false
664
+ respond_to?( :configuration_setting ).should == false
665
+ instance_variables.empty?.should == true
666
+ end
667
+ end
668
+
669
+ # * module included with setting
670
+ module ::CascadingConfiguration::Array::Unique::ObjectConfigurationMockModuleIncluded
671
+ include CascadingConfiguration::Array::Unique
672
+ # => singleton gets attr_setting and configurations
673
+ respond_to?( :attr_object_unique_array ).should == true
674
+ attr_object_unique_array :configuration_setting
675
+ respond_to?( :configuration_setting ).should == true
676
+ configuration_setting.should == []
677
+ configuration_setting.push( :a_configuration )
678
+ configuration_setting.should == [ :a_configuration ]
679
+ method_defined?( :configuration_setting ).should == false
680
+ instance_variables.empty?.should == true
681
+ # => including modules and classes get attr_setting and configurations
682
+ module SubmoduleIncluding
683
+ include CascadingConfiguration::Array::Unique::ObjectConfigurationMockModuleIncluded
684
+ method_defined?( :configuration_setting ).should == false
685
+ respond_to?( :configuration_setting ).should == false
686
+ method_defined?( :configuration_setting ).should == false
687
+ instance_variables.empty?.should == true
688
+ end
689
+ # => extending modules and classes get attr_setting and configurations
690
+ module SubmoduleExtending
691
+ extend CascadingConfiguration::Array::Unique::ObjectConfigurationMockModuleIncluded
692
+ # if we're extended then we want to use the eigenclass ancestor chain
693
+ # - the first ancestor will be the extending module
694
+ # - the rest of the ancestors will be the extending module's include chain
695
+ respond_to?( :configuration_setting ).should == false
696
+ method_defined?( :configuration_setting ).should == false
697
+ instance_variables.empty?.should == true
698
+ end
699
+ # => instances of including classes get configurations
700
+ class ClassIncluding
701
+ include CascadingConfiguration::Array::Unique::ObjectConfigurationMockModuleIncluded
702
+ method_defined?( :configuration_setting ).should == false
703
+ respond_to?( :configuration_setting ).should == false
704
+ instance_variables.empty?.should == true
705
+ end
706
+ setting_class_including_instance = ClassIncluding.new
707
+ setting_class_including_instance.respond_to?( :configuration_setting ).should == false
708
+ setting_class_including_instance.instance_variables.empty?.should == true
709
+ # => instances of extending classes get nothing
710
+ class ClassExtending
711
+ extend CascadingConfiguration::Array::Unique::ObjectConfigurationMockModuleIncluded
712
+ method_defined?( :configuration_setting ).should == false
713
+ respond_to?( :configuration_setting ).should == false
714
+ instance_variables.empty?.should == true
715
+ end
716
+ setting_class_including_instance = ClassExtending.new
717
+ setting_class_including_instance.respond_to?( :configuration_setting ).should == false
718
+ setting_class_including_instance.instance_variables.empty?.should == true
719
+ end
720
+
721
+ class CascadingConfiguration::Array::Unique::ObjectConfigurationMockClass
722
+ include CascadingConfiguration::Array::Unique::ObjectConfigurationMockModuleIncluded::SubmoduleIncluding
723
+ method_defined?( :configuration_setting ).should == false
724
+ respond_to?( :configuration_setting ).should == false
725
+ instance_variables.empty?.should == true
726
+ end
727
+ object_instance_one = CascadingConfiguration::Array::Unique::ObjectConfigurationMockClass.new
728
+ object_instance_one.respond_to?( :configuration_setting ).should == false
729
+ object_instance_one.instance_variables.empty?.should == true
730
+ class CascadingConfiguration::Array::Unique::ObjectConfigurationMockClassSub1 < CascadingConfiguration::Array::Unique::ObjectConfigurationMockClass
731
+ method_defined?( :configuration_setting ).should == false
732
+ respond_to?( :configuration_setting ).should == false
733
+ instance_variables.empty?.should == true
734
+ end
735
+ object_instance_two = CascadingConfiguration::Array::Unique::ObjectConfigurationMockClassSub1.new
736
+ object_instance_two.respond_to?( :configuration_setting ).should == false
737
+ object_instance_two.instance_variables.empty?.should == true
738
+ class CascadingConfiguration::Array::Unique::ObjectConfigurationMockClassSub2 < CascadingConfiguration::Array::Unique::ObjectConfigurationMockClassSub1
739
+ method_defined?( :configuration_setting ).should == false
740
+ respond_to?( :configuration_setting ).should == false
741
+ instance_variables.empty?.should == true
742
+ end
743
+
744
+ end
745
+
746
+ end