2

Ruby on Railsアプリケーションを構築していますが、アプリケーション全体のイベントに応答するカスタムプラグインを作成できるようにしたいと考えています。

たとえば、ユーザーは私のアプリケーションの場所にチェックインできます。これが起こったとき、私はできるようになりたいかもしれません

  • 電子メール通知を送信する
  • プッシュ通知を送信する
  • ユーザーにいくつかのポイントを与える
  • イベントをデータベースに記録します

重要なのは、上記のアクションをチェックインコードから切り離してほしいということです。これらのさまざまなコードスニペットを有効または無効にできるようにしたい。チェックインコードベースに触れることなく、コードに他のアクションを追加できるはずです。

Ruby on Railsにはこのようなことをするためのメカニズムがありますか?

ありがとう!

4

2 に答える 2

1

あなたが説明しているのは、基本的には一般的な投稿/購読メカニズムです。これを行う方法は 1000 通りあり、おそらく github と ruby​​gems で利用できるライブラリの数は同じくらいです。

彼らの重要な質問は、行動をどのように変えたいかということです。動作を定義するために起動時にいくつかの関数を呼び出すだけでよろしいですか? Ruby では、これはとてつもなく単純です。

#! /usr/bin/ruby

@hooks = []

def run_hooks(*args)
    @hooks.each { |hook| hook.call(*args) }
end

def on_trigger(&hook)
    @hooks << hook
end

on_trigger { |*args| puts "This is one trigger: #{args.inspect}" }

on_trigger { puts "This is another trigger" }

run_hooks("some","params")

それとももっと洗練されたものが欲しいですか?

于 2012-04-04T19:01:18.093 に答える
1

パブリッシュ/サブスクライブ型のシステムは他にもたくさんあると思いますが、少なくともRails の一部であるActiveSupport::Notificationsを見る価値はあるでしょう。

イベントをサブスクライバーに公開し、関心のあるサードパーティがイベントをサブスクライブするのが非常に簡単になります。アプリケーション ログ ファイルのランタイム サマリーは、これを使用して実装されます。rails は、ランタイム情報を含むイベントを発行し、情報をログ ファイルに書き込むサブスクライバーも提供します。これは、activerecord クエリ ロギングの実装方法でもあります。

于 2012-04-04T19:10:15.773 に答える