cascading-configuration-array-sorted 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +225 -0
- data/README.rdoc +58 -0
- data/lib/cascading-configuration-array-sorted.rb +33 -0
- data/lib/cascading-configuration-array-sorted/CascadingConfiguration/Array/Sorted.rb +12 -0
- data/lib/cascading-configuration-array-sorted/CascadingConfiguration/Array/Sorted/Interface.rb +107 -0
- data/lib/cascading-configuration-array-sorted/_private_/CascadingConfiguration/Array/Sorted/CompositingArray.rb +7 -0
- data/lib/cascading-configuration-array-sorted/_private_/CascadingConfiguration/Array/Sorted/CompositingArray/Interface.rb +157 -0
- data/lib/cascading-configuration-array-sorted/_private_/CascadingConfiguration/Array/Sorted/Interface/GettersSetters.rb +219 -0
- data/lib/cascading-configuration-array-sorted/_private_/CascadingConfiguration/Array/Sorted/ModuleSupportMethods.rb +45 -0
- data/spec/CascadingConfiguration/Array/Sorted_spec.rb +748 -0
- data/spec/_private_/CascadingConfiguration/Array/Sorted/CompositingArray_spec.rb +1008 -0
- metadata +77 -0
@@ -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
|