2011-01-14 8 views
5

イベント/リスナーモデルに適したアプリケーションがあります。いくつかの異なる種類のデータが公開され(イベント)、多くの異なることがそのデータ(リスナー)に作用する必要があるかもしれません。リスナーが起こる必要のある特定の順序はなく、各リスナーはイベントに対処する必要があるかどうかを判断します。イベント/ Observer Driven Ruby on Rails

このタスクを実行するためのRailsアプリケーションのツールはありますか? (。それは大したことではない私ができる、が。)私はこれを自分で行う必要がないことを願ってい

編集:Observerパターンは、この

+1

これらのリスナーは、別々のプロセスになりますか、データ公開中に呼び出すことができる単純なコードブロックですか。 – Nemo157

+0

おそらく単純なコードは時間の80%をブロックします。別のプロセスはまれなケースですが、おそらくおそらく発生します。 – Drew

答えて

4

のためのより良い選択かもしれませんがあなたはおそらくしたいと思いますActiveRecordのObserverクラスにフックします。

それで

http://api.rubyonrails.org/v3.2.13/classes/ActiveRecord/Observer.html

、あなたのモデルは、いくつかのライフサイクルイベントのためのカスタムロジックを実行することができます。

http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

私が正しくあなたの意図を理解していれば、あなたがする必要がありますすべてのメソッドを呼び出すことですこれらのコールバックからのイベントに対するリスナーのアクションを表す。

+0

これは非常に近いですが、公開されるすべてがActiveRecordであるとは限りません。 ActiveRecordに縛られていないと、私はどうすれば似たようなことをすることができますか? – Drew

+0

ActiveRecord:Observerを含めることにより、ActiveRecord機能を非ActiveRecordクラスにいつでも持ち込むことができます。詳細はこちら:http://yehudakatz.com/2010/01/10/activemodel-make-any-ruby-object-feel-like-activerecord/ – Shaun

2

あなたはactivesupportの:: Notifications.instrumentを使用することもできます。ここでは

は良い紹介です。

イベントへのイベント送信をデカップリングするための汎用ブリッジです。 EventMachineとは異なり、1つのWebリクエスト中にすべてのリスナーを実行するように調整されています。これは、多くの同時発生が発生するように調整されています。 event_dispatcher

この宝石は、あなたが購読し、シンプルかつ効果的な方法を使用してアプリケーションのイベントをリッスンすることができ、簡単なオブザーバーの実装を提供します。

0

私はこのユースケースに正確に応答ルビーの宝石を作成しました。