From 7a0acc7eeead9d0726a9b86086d4b23683fabf03 Mon Sep 17 00:00:00 2001 From: matz Date: Wed, 15 Oct 2008 14:12:15 +0000 Subject: * lib/delegate.rb (DelegateClass): restored 1.8 behavior for DelegateClass as well. [ruby-dev:36739] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19795 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/delegate.rb | 148 +++++++++++++++++++++++++++----------------------------- 1 file changed, 70 insertions(+), 78 deletions(-) (limited to 'lib/delegate.rb') diff --git a/lib/delegate.rb b/lib/delegate.rb index 60436e9aae..353c68ee97 100644 --- a/lib/delegate.rb +++ b/lib/delegate.rb @@ -119,86 +119,83 @@ class Delegator undef_method m end - module MethodDelegation - # - # Pass in the _obj_ to delegate method calls to. All methods supported by - # _obj_ will be delegated to. - # - def initialize(obj) - __setobj__(obj) - end + # + # Pass in the _obj_ to delegate method calls to. All methods supported by + # _obj_ will be delegated to. + # + def initialize(obj) + __setobj__(obj) + end - # Handles the magic of delegation through \_\_getobj\_\_. - def method_missing(m, *args, &block) - begin - target = self.__getobj__ - unless target.respond_to?(m) - super(m, *args, &block) - else - target.__send__(m, *args, &block) - end - rescue Exception - $@.delete_if{|s| %r"\A#{__FILE__}:\d+:in `method_missing'\z"o =~ s} - ::Kernel::raise + # Handles the magic of delegation through \_\_getobj\_\_. + def method_missing(m, *args, &block) + begin + target = self.__getobj__ + unless target.respond_to?(m) + super(m, *args, &block) + else + target.__send__(m, *args, &block) end + rescue Exception + $@.delete_if{|s| %r"\A#{__FILE__}:\d+:in `method_missing'\z"o =~ s} + ::Kernel::raise end + end - # - # Checks for a method provided by this the delegate object by fowarding the - # call through \_\_getobj\_\_. - # - def respond_to?(m, include_private = false) - return true if super - return self.__getobj__.respond_to?(m, include_private) - end + # + # Checks for a method provided by this the delegate object by fowarding the + # call through \_\_getobj\_\_. + # + def respond_to?(m, include_private = false) + return true if super + return self.__getobj__.respond_to?(m, include_private) + end - # - # Returns true if two objects are considered same. - # - def ==(obj) - return true if obj.equal?(self) - self.__getobj__ == obj - end + # + # Returns true if two objects are considered same. + # + def ==(obj) + return true if obj.equal?(self) + self.__getobj__ == obj + end - # - # This method must be overridden by subclasses and should return the object - # method calls are being delegated to. - # - def __getobj__ - raise NotImplementedError, "need to define `__getobj__'" - end + # + # This method must be overridden by subclasses and should return the object + # method calls are being delegated to. + # + def __getobj__ + raise NotImplementedError, "need to define `__getobj__'" + end - # - # This method must be overridden by subclasses and change the object delegate - # to _obj_. - # - def __setobj__(obj) - raise NotImplementedError, "need to define `__setobj__'" - end + # + # This method must be overridden by subclasses and change the object delegate + # to _obj_. + # + def __setobj__(obj) + raise NotImplementedError, "need to define `__setobj__'" + end - # Serialization support for the object returned by \_\_getobj\_\_. - def marshal_dump - __getobj__ - end - # Reinitializes delegation from a serialized object. - def marshal_load(obj) - __setobj__(obj) - end + # Serialization support for the object returned by \_\_getobj\_\_. + def marshal_dump + __getobj__ + end + # Reinitializes delegation from a serialized object. + def marshal_load(obj) + __setobj__(obj) + end - # Clone support for the object returned by \_\_getobj\_\_. - def clone - new = super - new.__setobj__(__getobj__.clone) - new - end - # Duplication support for the object returned by \_\_getobj\_\_. - def dup - new = super - new.__setobj__(__getobj__.dup) - new - end + # Clone support for the object returned by \_\_getobj\_\_. + def clone + new = super + new.__setobj__(__getobj__.clone) + new + end + # Duplication support for the object returned by \_\_getobj\_\_. + def dup + new = super + new.__setobj__(__getobj__.dup) + new end - include MethodDelegation end # @@ -258,16 +255,11 @@ end # end # def DelegateClass(superclass) - klass = Class.new + klass = Class.new(Delegator) methods = superclass.public_instance_methods(true) - methods -= [ - :__id__, :object_id, :__send__, :public_send, :respond_to?, :send, - :==, :equal?, :initialize, :method_missing, :__getobj__, :__setobj__, - :clone, :dup, :marshal_dump, :marshal_load, :instance_eval, :instance_exec, - :extend, - ] + methods -= ::Delegator.public_instance_methods + methods -= [:to_s,:inspect,:=~,:!~,:===] klass.module_eval { - include Delegator::MethodDelegation def __getobj__ # :nodoc: @delegate_dc_obj end -- cgit v1.2.3