43
43
class Delegator < BasicObject
44
44
kernel = ::Kernel . dup
45
45
kernel . class_eval do
46
+ alias __raise__ raise
46
47
[ :to_s , :inspect , :=~ , :!~ , :=== , :<=> , :eql? , :hash ] . each do |m |
47
48
undef_method m
48
49
end
49
50
private_instance_methods . each do |m |
50
- next if /\A block_given\? \z |iterator\? \z / =~ m
51
+ if /\A block_given\? \z |iterator\? \z |\A __raise__\z / =~ m
52
+ next
53
+ end
51
54
undef_method m
52
55
end
53
56
end
@@ -152,15 +155,15 @@ def !
152
155
# method calls are being delegated to.
153
156
#
154
157
def __getobj__
155
- raise NotImplementedError , "need to define `__getobj__'"
158
+ __raise__ :: NotImplementedError , "need to define `__getobj__'"
156
159
end
157
160
158
161
#
159
162
# This method must be overridden by subclasses and change the object delegate
160
163
# to _obj_.
161
164
#
162
165
def __setobj__ ( obj )
163
- raise NotImplementedError , "need to define `__setobj__'"
166
+ __raise__ :: NotImplementedError , "need to define `__setobj__'"
164
167
end
165
168
166
169
#
@@ -303,6 +306,7 @@ def self.public_api # :nodoc:
303
306
class SimpleDelegator <Delegator
304
307
# Returns the current object method calls are being delegated to.
305
308
def __getobj__
309
+ __raise__ ::ArgumentError , "not delegated" unless defined? ( @delegate_sd_obj )
306
310
@delegate_sd_obj
307
311
end
308
312
@@ -321,7 +325,7 @@ def __getobj__
321
325
# puts names[1] # => Sinclair
322
326
#
323
327
def __setobj__ ( obj )
324
- raise ArgumentError , "cannot delegate to self" if self . equal? ( obj )
328
+ __raise__ :: ArgumentError , "cannot delegate to self" if self . equal? ( obj )
325
329
@delegate_sd_obj = obj
326
330
end
327
331
end
@@ -377,10 +381,11 @@ def DelegateClass(superclass)
377
381
methods -= [ :to_s , :inspect , :=~ , :!~ , :=== ]
378
382
klass . module_eval do
379
383
def __getobj__ # :nodoc:
384
+ __raise__ ::ArgumentError , "not delegated" unless defined? ( @delegate_dc_obj )
380
385
@delegate_dc_obj
381
386
end
382
387
def __setobj__ ( obj ) # :nodoc:
383
- raise ArgumentError , "cannot delegate to self" if self . equal? ( obj )
388
+ __raise__ :: ArgumentError , "cannot delegate to self" if self . equal? ( obj )
384
389
@delegate_dc_obj = obj
385
390
end
386
391
methods . each do |method |
0 commit comments