Skip to main content

forwardable_mixin

🔗 Delegation with the Forwardable Module​

Forwardable lets you delegate selected methods to an internal object cleanly, avoiding boilerplate forwarding methods.

require 'forwardable'

module Trackable
extend Forwardable
def_delegators :@delegatee, :start, :stop

def initialize(delegatee)
@delegatee = delegatee
end
end

class Engine
def start; puts "Engine started" end
def stop; puts "Engine stopped" end
end

class Vehicle
include Trackable
end

Vehicle.new(Engine.new).start # => "Engine started"

Use def_delegators for multiple methods or def_delegator for single ones.