Sentinel: agora, mais transparente do que nunca
Em Janeiro criei a gem Sentinel, que provê a funcionalidade do padrão Observer de forma transparente para código Ruby. Bom, olhando os exemplos de uso da primeira versão, é possÃvel perceber que a biblioteca não é tão transparente assim: apesar de não alterar os métodos observados, a classe subject tem conhecimento do observer, o que não é bom (nos comentários do post linkado acima falo sobre um “hack” para contornar isso, mas não é uma solução elegante).
Com o amadurecimento da ideia e algumas alterações no código, foi possÃvel tornar a biblioteca totalmente transparente do ponto de vista do subject a partir da versão 0.2.0. Segue um exemplo (ignore a “inocência” do código):
class User def save ... end end class UserObserver include Sentinel observe User, :save def self.notify(*args) #método chamado antes de user.save end end |
Uma atual limitação é que a interceptação é sempre feita pelo método de classe notify do Observer. O plano é que isso seja flexibilizado em breve.
Nenhum comentário até agora