Observer no Rails

Posted on July 29, 2009

2


No mundo do desenvolvimento de software existem uma série de design patters visando solucionar problemas que se repetem nas aplicações. O livro Design Patterns in Ruby é bem legal e exemplifica uma séries dos patterns do GoF, inclusive citando as premissas de:

  • Separate Out the Things That Change from Those
    That Stay the Same
  • Program to an Interface, Not an Implementation
  • Prefer Composition over Inheritance
  • Delegate, Delegate, Delegate

e cita mais uma:

  • You Ain’t Gonna Need It (YAGNI )

Mas vou falar mesmo sobre um pattern que pode ser facilmente aplicado no Rails, usando ActiveRecord::Observer.

Da wikipedia:
Observer: “The observer pattern (sometimes known as publish/subscribe) is a software design pattern in which an object, called the subject, maintains a list of its dependents, called observers, and notifies them automatically of any state changes, usually by calling one of their methods. It is mainly used to
implement distributed event handling systems.”

Vamos criar um cadastro de usuário, simples com scaffold para por em prática o Observer.
Quando um usuário for criado, o Rails imprimirá uma mensagem de log no servidor ( você poderia implementar algo mais avançado depois ).

1) Gere o crud de Usuário:
script/generate scaffold Usuario nome:string
rake db:create:all
rake db:migrate

2) Para gerar um observer o rails disponibiliza um script. Apenas passe o nome do model como paramêtro.
script/generate observer Usuario

3) O Rails vai criar a classe usuario_observer.rb em app/models. Abra a classe e adicione o método after_create, como abaixo:

Picture 1

4) Para habilitar o observer, abra o config/environment.rb e adicione a seguinte linha:
config.active_record.observers = :usuario_observer

5) Inicie o servidor e cadastre um usuário (http://localhost:3000/usuarios).
Verifique o log do servidor para ver a mensagem que imprimimos, para ver que o Rails chamou o Observer.

Picture 2

Posted in: oo, rails, ruby