cascading-configuration-array-sorted 2.0.0

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