@@ -33,13 +33,24 @@ def write_writer value
33
33
def write_writer_other other , value
34
34
other . writer = value
35
35
end
36
+
37
+ attr_reader :original
38
+
39
+ def call_aliased
40
+ aliased
41
+ end
42
+
43
+ def call_aliased_other other
44
+ other . aliased
45
+ end
36
46
end
37
47
38
48
class PrivateDummy < Dummy
39
49
extend PrivateAttr
40
50
private_attr_accessor :accessor
41
51
private_attr_reader :reader
42
52
private_attr_writer :writer
53
+ private_alias_method :aliased , :original
43
54
end
44
55
45
56
class ProtectedDummy < Dummy
@@ -147,6 +158,47 @@ class ProtectedDummy < Dummy
147
158
end
148
159
end
149
160
161
+ describe 'private_alias_method' do
162
+ let ( :dummy_class ) { PrivateDummy }
163
+
164
+ before { dummy . instance_variable_set '@original' , old_value }
165
+
166
+ it 'allows alias to be called internally' do
167
+ dummy . call_aliased . must_equal old_value
168
+ end
169
+
170
+ it 'raises Error when alias is called externally' do
171
+ -> { dummy . call_aliased_other other } . must_raise NoMethodError
172
+ end
173
+
174
+ it 'allows the original method to be called externally' do
175
+ dummy . original . must_equal old_value
176
+ end
177
+
178
+ describe 'when the original method is overridden' do
179
+ let ( :dummy_class ) do
180
+ mod = Module . new do
181
+ def original
182
+ super . upcase
183
+ end
184
+ end
185
+ Class . new ( PrivateDummy ) . include ( mod )
186
+ end
187
+
188
+ it 'allows alias to be called internally' do
189
+ dummy . call_aliased . must_equal old_value
190
+ end
191
+
192
+ it 'raises Error when alias is called externally' do
193
+ -> { dummy . call_aliased_other other } . must_raise NoMethodError
194
+ end
195
+
196
+ it 'allows the overridden method to be called externally' do
197
+ dummy . original . must_equal old_value . upcase
198
+ end
199
+ end
200
+ end
201
+
150
202
describe 'protected_attr_accessor' do
151
203
let ( :dummy_class ) { ProtectedDummy }
152
204
0 commit comments