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