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.