There's a pretty cool module called Forwardable and it's used for delegation. Let me explain this a little better...
Delegation is a design pattern in which an object delegates its own method to another object.
Why would you ever need that?
Here's an example:
require 'forwardable'
class Employers
extend Forwardable
attr_reader :all
def_delegator :@all,:length,:size
def initialize(*ids)
@all = ids
end
end
employers = Employers.new(1,2,3,4)
puts employers.size # => 4
We have declared a new method on our instance variable, so we when we call size on it, it will forward our call to length.