mirror of
https://github.com/ruby/ruby.git
synced 2025-09-16 17:14:01 +02:00
Backport of r28376:
* lib/delegate.rb: Forward #trust, #untrust, #taint and #untaint to both the delegator and __getobj__ [ruby-core:26138] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_2@28378 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
0418aab850
commit
b76c33fead
2 changed files with 41 additions and 0 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
Tue Jun 22 13:26:47 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
|
||||||
|
|
||||||
|
* lib/delegate.rb: Forward #trust, #untrust, #taint and #untaint
|
||||||
|
to both the delegator and __getobj__ [ruby-core:26138]
|
||||||
|
|
||||||
Tue Jun 22 01:38:23 2010 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
|
Tue Jun 22 01:38:23 2010 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
|
||||||
|
|
||||||
* lib/drb/drb.rb: raise DRbConnError instead of ArgumentError if too
|
* lib/drb/drb.rb: raise DRbConnError instead of ArgumentError if too
|
||||||
|
|
|
@ -137,7 +137,9 @@ class Delegator < BasicObject
|
||||||
__setobj__(obj)
|
__setobj__(obj)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
#
|
||||||
# Handles the magic of delegation through \_\_getobj\_\_.
|
# Handles the magic of delegation through \_\_getobj\_\_.
|
||||||
|
#
|
||||||
def method_missing(m, *args, &block)
|
def method_missing(m, *args, &block)
|
||||||
target = self.__getobj__
|
target = self.__getobj__
|
||||||
begin
|
begin
|
||||||
|
@ -222,7 +224,9 @@ class Delegator < BasicObject
|
||||||
raise NotImplementedError, "need to define `__setobj__'"
|
raise NotImplementedError, "need to define `__setobj__'"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
#
|
||||||
# Serialization support for the object returned by \_\_getobj\_\_.
|
# Serialization support for the object returned by \_\_getobj\_\_.
|
||||||
|
#
|
||||||
def marshal_dump
|
def marshal_dump
|
||||||
ivars = instance_variables.reject {|var| /\A@delegate_/ =~ var}
|
ivars = instance_variables.reject {|var| /\A@delegate_/ =~ var}
|
||||||
[
|
[
|
||||||
|
@ -231,7 +235,10 @@ class Delegator < BasicObject
|
||||||
__getobj__
|
__getobj__
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
#
|
||||||
# Reinitializes delegation from a serialized object.
|
# Reinitializes delegation from a serialized object.
|
||||||
|
#
|
||||||
def marshal_load(data)
|
def marshal_load(data)
|
||||||
version, vars, values, obj = data
|
version, vars, values, obj = data
|
||||||
if version == :__v2__
|
if version == :__v2__
|
||||||
|
@ -250,7 +257,36 @@ class Delegator < BasicObject
|
||||||
end
|
end
|
||||||
private :initialize_clone, :initialize_dup
|
private :initialize_clone, :initialize_dup
|
||||||
|
|
||||||
|
##
|
||||||
|
# :method: trust
|
||||||
|
# Trust both the object returned by \_\_getobj\_\_ and self.
|
||||||
|
#
|
||||||
|
|
||||||
|
##
|
||||||
|
# :method: untrust
|
||||||
|
# Untrust both the object returned by \_\_getobj\_\_ and self.
|
||||||
|
#
|
||||||
|
|
||||||
|
##
|
||||||
|
# :method: taint
|
||||||
|
# Taint both the object returned by \_\_getobj\_\_ and self.
|
||||||
|
#
|
||||||
|
|
||||||
|
##
|
||||||
|
# :method: untaint
|
||||||
|
# Untaint both the object returned by \_\_getobj\_\_ and self.
|
||||||
|
#
|
||||||
|
|
||||||
|
[:trust, :untrust, :taint, :untaint].each do |method|
|
||||||
|
define_method method do
|
||||||
|
__getobj__.send(method)
|
||||||
|
super()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
#
|
||||||
# Freeze self and target at once.
|
# Freeze self and target at once.
|
||||||
|
#
|
||||||
def freeze
|
def freeze
|
||||||
__getobj__.freeze
|
__getobj__.freeze
|
||||||
super
|
super
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue