Type:
Class

A concrete implementation of Delegator, this class provides the means to delegate all supported method calls to the object passed into the constructor and even to change the object being delegated to at a later time with #__setobj__.

Here's a simple example that takes advantage of the fact that SimpleDelegator's delegation object can be changed at any time.

class Stats
  def initialize
    @source = SimpleDelegator.new([])
  end

  def stats(records)
    @source.__setobj__(records)

    "Elements:  #{@source.size}\n" +
    " Non-Nil:  #{@source.compact.size}\n" +
    "  Unique:  #{@source.uniq.size}\n"
  end
end

s = Stats.new
puts s.stats(%w{James Edward Gray II})
puts
puts s.stats([1, 2, 3, nil, 4, 5, 1, 2])

Prints:

Elements:  4
 Non-Nil:  4
  Unique:  4

Elements:  8
 Non-Nil:  7
  Unique:  6
__setobj__
  • References/Ruby on Rails/Ruby/Classes/SimpleDelegator

__setobj__(obj) Instance Public methods Changes the delegate object to obj

2025-01-10 15:47:30
__getobj__
  • References/Ruby on Rails/Ruby/Classes/SimpleDelegator

__getobj__() Instance Public methods Returns the current object method calls

2025-01-10 15:47:30