* lib/delegate.rb: Add example for __setobj__ and __getobj__

[Bug #8615] Patch by Caleb Thompson


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41905 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
zzak 2013-07-10 15:50:23 +00:00
parent e82591d0ca
commit 0357488b43
2 changed files with 33 additions and 0 deletions

View File

@ -1,3 +1,8 @@
Thu Jul 11 00:48:29 2013 Zachary Scott <zachary@zacharyscott.net>
* lib/delegate.rb: Add example for __setobj__ and __getobj__
[Bug #8615] Patch by Caleb Thompson
Wed Jul 10 23:29:22 2013 Zachary Scott <zachary@zacharyscott.net>
* lib/logger.rb: Use :call-seq: for method signature rdoc

View File

@ -230,6 +230,34 @@ end
# and even to change the object being delegated to at a later time with
# #__setobj__.
#
# class User
# def born_on
# Date.new(1989, 09, 10)
# end
# end
#
# class UserDecorator < SimpleDelegator
# def birth_year
# born_on.year
# end
# end
#
# decorated_user = UserDecorator.new(User.new)
# decorated_user.birth_year #=> 1989
# decorated_user.__getobj__ #=> #<User: ...>
#
# A SimpleDelegator instance can take advantage of the fact that SimpleDelegator
# is a subclass of +Delegator+ to call <tt>super</tt> to have methods called on
# the object being delegated to.
#
# class SuperArray < SimpleDelegator
# def [](*args)
# super + 1
# end
# end
#
# SuperArray.new([1])[0] #=> 2
#
# Here's a simple example that takes advantage of the fact that
# SimpleDelegator's delegation object can be changed at any time.
#