2012-04-04 63 views
2

我正在構建Ruby on Rails應用程序,我希望能夠編寫響應應用程序範圍事件的自定義插件。Rails應用程序範圍的事件/掛鉤插件體系結構

例如,用戶可以簽入我的應用程序中的某個地方。發生這種情況時,我可能希望能夠

  • 發送電子郵件通知
  • 發送推送通知
  • 獎某些指向用戶
  • 事件日誌到數據庫

問題是,我希望上述操作與簽入代碼分離。我希望能夠啓用或禁用這些不同的代碼片段。我應該可以將其他操作添加到代碼中,而無需觸摸簽入代碼庫。

Ruby on Rails是否有這樣的機制?

謝謝!

回答

1

雖然我相信有很多其他的發佈/訂閱式系統,它可能是價值至少看ActiveSupport::Notifications是軌道

的一部分,這使得它很容易將事件發佈到用戶,有興趣的第3各方訂閱他們。應用程序日誌文件中的運行時摘要通過以下方式實現:rails使用運行時信息發佈事件,並提供將信息寫入日誌文件的用戶。這也是activerecord查詢記錄如何實現的。

1

你所描述的實質上是一種通用的post/subscribe機制。有上千種方法可以做到這一點,並可能在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") 

或者你想要更精緻的東西?