Dois design patterns muito comuns no desenvolvimento de aplicações Rails são os Decorators e os Presenters. Uma classe que está presente no Ruby e pode nos ajudar na construção desses padrões – facilitando a delegação de métodos de um objeto para outro – é o SimpleDelegator.
Considere uma classe Rental, que representa uma locação de carro, por exemplo:
class Rental
 attr_accessor :status, :customer, :price
 def initialize(status, customer, price)
   @status = status
   @customer = customer
   @price = price
 end
end
Utilizando o SimpleDelegator fica muito fácil montar a classe RentalPresenter para expandir a classe Rental.
class RentalPresenter < SimpleDelegator
 def status
   "A locação está com status: #{super} "
 end
 def display
   "O cliente #{customer}, tem uma locação no valor de #{price}."
 end
end
Dessa maneira, podemos chamar todos os métodos da classe Rental para RentalPresenter, além dos métodos expandidos pelo Presenter, como no exemplo:
rental = Rental.new("Ativa", "Luiz", 45)
rental_presenter = RentalPresenter.new(rental)
puts rental_presenter.customer
#=> Luiz
puts rental_presenter.price
#=> 45
puts rental_presenter.status
#=> A locação está com status: Ativa
puts rental_presenter.display
#=> O cliente Luiz, tem uma locação no valor de 45.
Se quiser saber mais sobre o SimpleDelegator e os padrões Presenter e Decorator, você pode ler nosso artigo: Presenters e Decorators em Ruby.