[前][次][番号順一覧][スレッド一覧]

ruby-changes:8267

From: matz <ko1@a...>
Date: Wed, 15 Oct 2008 23:12:51 +0900 (JST)
Subject: [ruby-changes:8267] Ruby:r19795 (trunk): * lib/delegate.rb (DelegateClass): restored 1.8 behavior for

matz	2008-10-15 23:12:15 +0900 (Wed, 15 Oct 2008)

  New Revision: 19795

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=19795

  Log:
    * lib/delegate.rb (DelegateClass): restored 1.8 behavior for
      DelegateClass as well.  [ruby-dev:36739]

  Modified files:
    trunk/ChangeLog
    trunk/lib/delegate.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 19794)
+++ ChangeLog	(revision 19795)
@@ -1,3 +1,8 @@
+Wed Oct 15 23:11:10 2008  Yukihiro Matsumoto  <matz@r...>
+
+	* lib/delegate.rb (DelegateClass): restored 1.8 behavior for
+	  DelegateClass as well.  [ruby-dev:36739]
+
 Wed Oct 15 22:19:14 2008  NAKAMURA Usaku  <usa@r...>
 
 	* array.c (RESIZE_CAPA): check whether len is longer than capacity.
Index: lib/delegate.rb
===================================================================
--- lib/delegate.rb	(revision 19794)
+++ lib/delegate.rb	(revision 19795)
@@ -119,86 +119,83 @@
     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
-  include MethodDelegation
+  # Duplication support for the object returned by \_\_getobj\_\_.
+  def dup
+    new = super
+    new.__setobj__(__getobj__.dup)
+    new
+  end
 end
 
 #
@@ -258,16 +255,11 @@
 #   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

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]