2012-04-04 9 views
2

私はRuby on Railsアプリケーションを構築しており、アプリケーション全体のイベントに応答するカスタムプラグインを作成したいと考えています。プラグインアーキテクチャ用のアプリケーション全体のイベント/フック

たとえば、ユーザーは自分のアプリケーション内の場所にチェックインすることができます。これが発生すると、私は、ユーザー

  • にはいくつかのポイントがデータベース
  • にイベントをログプッシュ通知
  • 賞を送信する電子メール通知
  • を送る

    • のことができるようにすることもできます

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

    Ruby on Railsには、このような処理を行うメカニズムがありますか?

    ありがとうございます!

  • 答えて

    1

    は、それはおそらく、それはそれはかなり簡単に加入者にし、興味を持って第三のためにイベントを発行することができ、レール

    の一部がある、少なくともActiveSupport::Notifications見て価値がありますパーティーに参加することができます。アプリケーションログファイルの実行時サマリは、次のように実装されています。railsはランタイム情報でイベントをパブリッシュし、ログファイルに情報を書き込むサブスクライバも提供します。これは、activerecordクエリのロギングの実装方法でもあります。

    1

    あなたが説明しているのは、本質的に一般的なポスト/サブスクライブメカニズムです。これを行うには数千の方法があり、おそらく多くのライブラリがgithubとrubygemsで利用できます。

    重要な質問は、どのように動作を変更したいですか?起動時にいくつかの関数を呼び出して振る舞いを定義するだけでうれしいですか?ルビーでは、これはばかばかしいほど簡単です:

    #! /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") 
    

    それとも、もっとsophistocated何かをしたいですか?私は他のパブリッシュ/サブスクライブ型システムの多くがあると確信していますが

    関連する問題