Delegando métodos com SimpleDelegator

Dicas - 22/Set/2019 - por Campus Code

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.

Referência

Campus Code