class DumbDelegator
@example class Coffee
def cost 2 end def origin "Colombia" end
end
class Milk < DumbDelegator
def cost super + 0.4 end
end
class Sugar < DumbDelegator
def cost super + 0.2 end
end
coffee = Coffee.new Milk.new(coffee).origin #=> Colombia Sugar.new(Sugar.new(coffee)).cost #=> 2.4
cup_o_coffee = Sugar.new(Milk.new(coffee)) cup_o_coffee.cost #=> 2.6 cup_o_coffee.class #=> Coffee cup_o_coffee.is_a?(Coffee) #=> true cup_o_coffee.is_a?(Milk) #=> true cup_o_coffee.is_a?(Sugar) #=> true
Constants
- VERSION
Public Class Methods
new(target)
click to toggle source
# File lib/dumb_delegator.rb, line 49 def initialize(target) __setobj__(target) end
Public Instance Methods
__getobj__()
click to toggle source
@return [Object] The object calls are being delegated to
# File lib/dumb_delegator.rb, line 74 def __getobj__ @__dumb_target__ end
__setobj__(obj)
click to toggle source
@param obj [Object] Change the object delegate to obj
.
# File lib/dumb_delegator.rb, line 79 def __setobj__(obj) raise ::ArgumentError, "Delegation to self is not allowed." if obj.__id__ == __id__ @__dumb_target__ = obj end
inspect()
click to toggle source
# File lib/dumb_delegator.rb, line 53 def inspect "#<#{(class << self; self; end).superclass}:#{object_id} obj: #{__getobj__.inspect}>" end
marshal_dump()
click to toggle source
# File lib/dumb_delegator.rb, line 84 def marshal_dump [ :__v1__, __getobj__, ] end
marshal_load(data)
click to toggle source
# File lib/dumb_delegator.rb, line 91 def marshal_load(data) version, obj = data case version when :__v1__ __setobj__(obj) end end
method_missing(method, *args, &block)
click to toggle source
Calls superclass method
# File lib/dumb_delegator.rb, line 61 def method_missing(method, *args, &block) if @__dumb_target__.respond_to?(method) @__dumb_target__.__send__(method, *args, &block) else super end end
methods(all = true)
click to toggle source
Calls superclass method
# File lib/dumb_delegator.rb, line 57 def methods(all = true) __getobj__.methods(all) | super end
respond_to_missing?(method, include_private = false)
click to toggle source
Calls superclass method
# File lib/dumb_delegator.rb, line 69 def respond_to_missing?(method, include_private = false) __getobj__.respond_to?(method, include_private) || super end
Private Instance Methods
initialize_clone(obj)
click to toggle source
# File lib/dumb_delegator.rb, line 105 def initialize_clone(obj) __setobj__(obj.__getobj__.clone) end
initialize_dup(obj)
click to toggle source
# File lib/dumb_delegator.rb, line 101 def initialize_dup(obj) __setobj__(obj.__getobj__.dup) end