identifies_as 1.0.5 → 1.0.6
Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.rdoc
CHANGED
@@ -8,3 +8,4 @@ Initial release.
|
|
8
8
|
Renamed :no_longer_identifying_as! and :instances_no_longer_identify_as! to :stop_identifying_as! and :stop_instances_identifying_as!
|
9
9
|
Added support for subclassing and module inclusion.
|
10
10
|
Added Module-level support for :<, :>, :<=, :>=, :<==>.
|
11
|
+
Updates for support to stop identification when an ancestor identifies (either actually or by way of IdentifiesAs).
|
@@ -49,7 +49,7 @@ module ::IdentifiesAs::ClassInstance
|
|
49
49
|
# @return [Object] Self.
|
50
50
|
def stop_instances_identifying_as!( *objects )
|
51
51
|
|
52
|
-
return ::IdentifiesAs.
|
52
|
+
return ::IdentifiesAs.stop_object_instances_identifying_as!( self, *objects )
|
53
53
|
|
54
54
|
end
|
55
55
|
|
@@ -50,7 +50,7 @@ module ::IdentifiesAs::ObjectInstance
|
|
50
50
|
# @return [Object] Self.
|
51
51
|
def stop_identifying_as!( *objects )
|
52
52
|
|
53
|
-
return ::IdentifiesAs.
|
53
|
+
return ::IdentifiesAs.stop_object_identifying_as!( self, *objects )
|
54
54
|
|
55
55
|
end
|
56
56
|
|
@@ -9,6 +9,9 @@ module ::IdentifiesAs
|
|
9
9
|
@identities = { }
|
10
10
|
@instance_identities = { }
|
11
11
|
|
12
|
+
@do_not_identify_as = { }
|
13
|
+
@instances_do_not_identify_as = { }
|
14
|
+
|
12
15
|
################################
|
13
16
|
# self.object_identifies_as! #
|
14
17
|
################################
|
@@ -26,6 +29,12 @@ module ::IdentifiesAs
|
|
26
29
|
identifies_as_hash[ this_object ] = true
|
27
30
|
end
|
28
31
|
|
32
|
+
if do_not_identify_as_hash = @do_not_identify_as[ object_id ]
|
33
|
+
objects.each do |this_object|
|
34
|
+
do_not_identify_as_hash.delete( this_object )
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
29
38
|
return identifies_as_hash
|
30
39
|
|
31
40
|
end
|
@@ -45,6 +54,12 @@ module ::IdentifiesAs
|
|
45
54
|
identifies_as_hash[ this_object ] = true
|
46
55
|
end
|
47
56
|
|
57
|
+
if do_not_identify_as_hash = @instances_do_not_identify_as[ object_class ]
|
58
|
+
objects.each do |this_object|
|
59
|
+
do_not_identify_as_hash.delete( object_class )
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
48
63
|
return identifies_as_hash
|
49
64
|
|
50
65
|
end
|
@@ -57,10 +72,15 @@ module ::IdentifiesAs
|
|
57
72
|
|
58
73
|
object_identifies = object_instance_identifies_as?( object, other_object_type )
|
59
74
|
|
60
|
-
|
75
|
+
# If we got nil that means we were told to stop looking.
|
76
|
+
unless object_identifies or object_identifies.nil?
|
61
77
|
object_identifies = object_instances_identify_as?( object.class, other_object_type )
|
62
78
|
end
|
63
79
|
|
80
|
+
if object_identifies.nil?
|
81
|
+
object_identifies = false
|
82
|
+
end
|
83
|
+
|
64
84
|
return object_identifies
|
65
85
|
|
66
86
|
end
|
@@ -87,8 +107,14 @@ module ::IdentifiesAs
|
|
87
107
|
end
|
88
108
|
|
89
109
|
object_ancestor_chain.each do |this_ancestor|
|
90
|
-
|
91
|
-
|
110
|
+
|
111
|
+
this_ancestor_id = this_ancestor.__id__
|
112
|
+
|
113
|
+
if do_not_identify_as_hash = @do_not_identify_as[ this_ancestor_id ] and
|
114
|
+
do_not_identify_as_hash.has_key?( other_object_type )
|
115
|
+
object_identifies = nil
|
116
|
+
break
|
117
|
+
elsif identifies_as_hash = @identities[ this_ancestor_id ]
|
92
118
|
break if object_identifies = identifies_as_hash.has_key?( other_object_type )
|
93
119
|
end
|
94
120
|
|
@@ -105,11 +131,15 @@ module ::IdentifiesAs
|
|
105
131
|
def self.object_instances_identify_as?( object_class, other_object_type )
|
106
132
|
|
107
133
|
object_identifies = false
|
108
|
-
|
109
134
|
object_class.ancestors.each do |this_ancestor|
|
110
|
-
if
|
135
|
+
if do_not_identify_as_hash = @instances_do_not_identify_as[ this_ancestor ] and
|
136
|
+
do_not_identify_as_hash.has_key?( other_object_type )
|
137
|
+
object_identifies = nil
|
138
|
+
break
|
139
|
+
elsif identifies_as_hash = @instance_identities[ this_ancestor ]
|
111
140
|
object_identifies = identifies_as_hash.has_key?( other_object_type )
|
112
141
|
end
|
142
|
+
|
113
143
|
end
|
114
144
|
|
115
145
|
return object_identifies
|
@@ -157,26 +187,37 @@ module ::IdentifiesAs
|
|
157
187
|
end
|
158
188
|
|
159
189
|
######################################
|
160
|
-
# self.
|
190
|
+
# self.stop_object_identifying_as! #
|
161
191
|
######################################
|
162
192
|
|
163
|
-
def self.
|
193
|
+
def self.stop_object_identifying_as!( object, *objects )
|
194
|
+
|
195
|
+
object_id = object.__id__
|
164
196
|
|
165
|
-
if identifies_as_hash = @identities[
|
197
|
+
if identifies_as_hash = @identities[ object_id ]
|
166
198
|
objects.each do |this_object|
|
167
199
|
identifies_as_hash.delete( this_object )
|
168
200
|
end
|
169
201
|
end
|
202
|
+
|
203
|
+
unless do_not_identify_as_hash = @do_not_identify_as[ object_id ]
|
204
|
+
do_not_identify_as_hash = { }
|
205
|
+
@do_not_identify_as[ object_id ] = do_not_identify_as_hash
|
206
|
+
end
|
207
|
+
|
208
|
+
objects.each do |this_object|
|
209
|
+
do_not_identify_as_hash[ this_object ] = true
|
210
|
+
end
|
170
211
|
|
171
212
|
return identifies_as_hash
|
172
213
|
|
173
214
|
end
|
174
215
|
|
175
216
|
################################################
|
176
|
-
# self.
|
217
|
+
# self.stop_object_instances_identifying_as! #
|
177
218
|
################################################
|
178
219
|
|
179
|
-
def self.
|
220
|
+
def self.stop_object_instances_identifying_as!( object_class, *objects )
|
180
221
|
|
181
222
|
if identifies_as_hash = @instance_identities[ object_class ]
|
182
223
|
object_identifies = identifies_as_hash.has_key?( object_class )
|
@@ -184,7 +225,16 @@ module ::IdentifiesAs
|
|
184
225
|
object_identifies.delete( this_object )
|
185
226
|
end
|
186
227
|
end
|
187
|
-
|
228
|
+
|
229
|
+
unless do_not_identify_as_hash = @instances_do_not_identify_as[ object_class ]
|
230
|
+
do_not_identify_as_hash = { }
|
231
|
+
@instances_do_not_identify_as[ object_class ] = do_not_identify_as_hash
|
232
|
+
end
|
233
|
+
|
234
|
+
objects.each do |this_object|
|
235
|
+
do_not_identify_as_hash[ this_object ] = true
|
236
|
+
end
|
237
|
+
|
188
238
|
return identifies_as_hash
|
189
239
|
|
190
240
|
end
|
data/spec/IdentifiesAs_spec.rb
CHANGED
@@ -87,15 +87,15 @@ describe ::IdentifiesAs do
|
|
87
87
|
( AlsoNotAnArray <=> AlsoNotAnArray ).should == 0
|
88
88
|
( AlsoNotAnArray <=> Unrelated ).should == nil
|
89
89
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
( Array ===
|
90
|
+
not_an_array_instance = NotAnArray.new
|
91
|
+
not_an_array_instance.identifies_as?( Array ).should == true
|
92
|
+
not_an_array_instance.is_a?( Array ).should == true
|
93
|
+
( Array === not_an_array_instance ).should == true
|
94
94
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
( Array ===
|
95
|
+
also_not_an_array_instance = AlsoNotAnArray.new
|
96
|
+
also_not_an_array_instance.identifies_as?( Array ).should == true
|
97
|
+
also_not_an_array_instance.is_a?( Array ).should == true
|
98
|
+
( Array === also_not_an_array_instance ).should == true
|
99
99
|
|
100
100
|
module IncludersActLikeArray
|
101
101
|
include IdentifiesAs
|
@@ -106,6 +106,12 @@ describe ::IdentifiesAs do
|
|
106
106
|
include IncludersActLikeArray
|
107
107
|
end
|
108
108
|
|
109
|
+
another_non_array_instance = AnotherNonArray.new
|
110
|
+
another_non_array_instance.identifies_as?( Array ).should == true
|
111
|
+
another_non_array_instance.is_a?( Array ).should == true
|
112
|
+
( Array === another_non_array_instance ).should == true
|
113
|
+
|
114
|
+
|
109
115
|
module IncludersAlsoActLikeArray
|
110
116
|
include IncludersActLikeArray
|
111
117
|
end
|
@@ -114,10 +120,20 @@ describe ::IdentifiesAs do
|
|
114
120
|
include IncludersAlsoActLikeArray
|
115
121
|
end
|
116
122
|
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
( Array ===
|
123
|
+
and_another_non_array_instance = AndAnotherNonArray.new
|
124
|
+
and_another_non_array_instance.identifies_as?( Array ).should == true
|
125
|
+
and_another_non_array_instance.is_a?( Array ).should == true
|
126
|
+
( Array === and_another_non_array_instance ).should == true
|
127
|
+
|
128
|
+
AndAnotherNonArray.stop_instances_identifying_as!( Array )
|
129
|
+
and_another_non_array_instance.identifies_as?( Array ).should == false
|
130
|
+
and_another_non_array_instance.is_a?( Array ).should == false
|
131
|
+
( Array === and_another_non_array_instance ).should == false
|
132
|
+
|
133
|
+
AnotherNonArray.stop_instances_identifying_as!( Array )
|
134
|
+
another_non_array_instance.identifies_as?( Array ).should == false
|
135
|
+
another_non_array_instance.is_a?( Array ).should == false
|
136
|
+
( Array === another_non_array_instance ).should == false
|
121
137
|
|
122
138
|
end
|
123
139
|
|