Skip to main content

forwarding_with_forwardable

🎯 Delegate Methods Cleanly with Forwardable​

The Forwardable module lets you delegate specific methods to an internal object, reducing boilerplate and improving encapsulation.

require 'forwardable'

class UserDecorator
extend Forwardable

def initialize(user)
@user = user
end

def_delegators :@user, :name, :email

def formatted_email
"#{name} <#{email}>"
end
end

user = OpenStruct.new(name: 'Jane', email: 'jane@example.com')
decorator = UserDecorator.new(user)
puts decorator.formatted_email # => "Jane <jane@example.com>"