diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-02-05 07:38:10 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-02-05 07:38:10 +0000 |
commit | 7873c05684839a88b1b9fd61272f3e70af8e3ac4 (patch) | |
tree | 3a8d210fbc43a25bcaac17fdb3ad60f422c4c629 /lib | |
parent | 1c4fe5395db05b45014734126ae448d40989db80 (diff) | |
download | ruby-7873c05684839a88b1b9fd61272f3e70af8e3ac4.tar.gz |
* lib/delegate.rb (Delegator): include copy of Kernel.
[ruby-dev:40314]
* lib/delegate.rb (Delegator#{dup,clone}): class of copy should be
Delegator. [ruby-dev:40313]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26580 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r-- | lib/delegate.rb | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/lib/delegate.rb b/lib/delegate.rb index 473fa0cb8f..0d5dc23b6e 100644 --- a/lib/delegate.rb +++ b/lib/delegate.rb @@ -115,15 +115,15 @@ # implementation, see SimpleDelegator. # class Delegator < BasicObject - # :stopdoc: - def class - (class << self; self; end).superclass - end - - def extend(*mods) - (class << self; self; end).class_eval {include(*mods)} + kernel = ::Kernel.dup + kernel.class_eval do + [:to_s,:inspect,:=~,:!~,:===,:<=>].each do |m| + undef_method m + end end + include kernel + # :stopdoc: def self.const_missing(n) ::Object.const_get(n) end @@ -141,7 +141,7 @@ class Delegator < BasicObject def method_missing(m, *args, &block) begin target = self.__getobj__ - unless target.respond_to?(m, true) + unless target.respond_to?(m) super(m, *args, &block) else target.__send__(m, *args, &block) @@ -211,9 +211,13 @@ class Delegator < BasicObject end end - # clone/dup support for the object returned by \_\_getobj\_\_. - def initialize_copy(other) - self.__setobj__(other.__getobj__.clone) + # :nodoc: + def dup + self.class.new(__getobj__.dup) + end + # :nodoc: + def clone + self.class.new(__getobj__.clone) end # Freeze self and target at once. |