Usando o SimpleDelegator para criar decorators em Ruby
Criado em: 13/02/2013
Recentemente postei no blog da HE:labs sobre como extrair responsabilidade de models no rails utilizando-se de decorators para quem curtiu e já está utilizando decorators em suas apps apresento agora o SimpleDelegator que nos ajuda a criar nossos decorators.
Imagine que tenhamos a seguinte classe:
class Saiyajin
attr_accessor :name
def initialize(name)
self.name = name
end
end
uma simples classe ruby, mas que poderia ser um de seus models active record por exemplo.
A nossa classe é utilizada assim:
goku = Saiyajin.new("Goku")
puts goku.name # => "Goku"
Agora iremos criar o Super Sayajin, vamos a nossa classe:
require 'delegate'
class SuperSaiyajin < SimpleDelegator
def name
"#{super} super saiyajin"
end
def power
"It's Over 9000!"
end
end
a nossa classe Super Sayajin poderia ser utilizada assim:
goku = SuperSaiyajin.new(goku)
puts goku.name # => "Goku super saiyajin"
puts goku.power # => "It's Over 9000!"
Criando o nosso decorator herdando de SimpleDelegator
não precisamos criar um initialize
e agora o nosso decorator responde a todos os métodos da classe “decorada”. Perceba que podemos utilizar o super
para nos referenciarmos a métodos da classe “decorada”, como usamos em SuperSaiyajin#name
.
Fica a dica do SimpleDelegator
para quando formos criar nossos decorators. Se você não conhecia o SimpleDelegator
ou usa outra abordagem comenta aí.
Comentários
Comentários powered by Disqus