summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-05-17 07:18:29 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-05-17 07:18:29 +0000
commit85e73ed515733b4164c28461f68796a1575e2418 (patch)
tree17c7acdee90e2a54422c29460db7ac72be93b07c /lib
parent82f12c621f5991a290cfe07c0bf4b4c605a1d1aa (diff)
downloadruby-85e73ed515733b4164c28461f68796a1575e2418.tar.gz
ruby-85e73ed515733b4164c28461f68796a1575e2418.tar.xz
ruby-85e73ed515733b4164c28461f68796a1575e2418.zip
* ext/socket/socket.c (setup_domain_and_type): honor duck typing.
[ruby-dev:23522] * ext/socket/socket.c (sock_s_getnameinfo): ditto. git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8@6347 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r--lib/delegate.rb26
1 files changed, 18 insertions, 8 deletions
diff --git a/lib/delegate.rb b/lib/delegate.rb
index 3bbd148e7..122a56564 100644
--- a/lib/delegate.rb
+++ b/lib/delegate.rb
@@ -87,14 +87,24 @@ def DelegateClass(superclass)
methods = superclass.public_instance_methods(true)
methods -= ::Kernel.public_instance_methods(false)
methods |= ["to_s","to_a","inspect","==","=~","==="]
- klass.module_eval <<-EOS
- def initialize(obj)
- @_dc_obj = obj
- end
- def __getobj__
- @_dc_obj
- end
- EOS
+ klass.module_eval {
+ def initialize(obj)
+ @_dc_obj = obj
+ end
+ def method_missing(m, *args)
+ p [m, *args]
+ unless @_dc_obj.respond_to?(m)
+ super(m, *args)
+ end
+ @_dc_obj.__send__(m, *args)
+ end
+ def __getobj__
+ @_dc_obj
+ end
+ def __setobj__(obj)
+ @_dc_obj = obj
+ end
+ }
for method in methods
begin
klass.module_eval <<-EOS