我正在構建Ruby on Rails應用程序,我希望能夠編寫響應應用程序範圍事件的自定義插件。Rails應用程序範圍的事件/掛鉤插件體系結構
例如,用戶可以簽入我的應用程序中的某個地方。發生這種情況時,我可能希望能夠
- 發送電子郵件通知
- 發送推送通知
- 獎某些指向用戶
- 事件日誌到數據庫
問題是,我希望上述操作與簽入代碼分離。我希望能夠啓用或禁用這些不同的代碼片段。我應該可以將其他操作添加到代碼中,而無需觸摸簽入代碼庫。
Ruby on Rails是否有這樣的機制?
謝謝!
我正在構建Ruby on Rails應用程序,我希望能夠編寫響應應用程序範圍事件的自定義插件。Rails應用程序範圍的事件/掛鉤插件體系結構
例如,用戶可以簽入我的應用程序中的某個地方。發生這種情況時,我可能希望能夠
問題是,我希望上述操作與簽入代碼分離。我希望能夠啓用或禁用這些不同的代碼片段。我應該可以將其他操作添加到代碼中,而無需觸摸簽入代碼庫。
Ruby on Rails是否有這樣的機制?
謝謝!
雖然我相信有很多其他的發佈/訂閱式系統,它可能是價值至少看ActiveSupport::Notifications是軌道
的一部分,這使得它很容易將事件發佈到用戶,有興趣的第3各方訂閱他們。應用程序日誌文件中的運行時摘要通過以下方式實現:rails使用運行時信息發佈事件,並提供將信息寫入日誌文件的用戶。這也是activerecord查詢記錄如何實現的。
你所描述的實質上是一種通用的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")
或者你想要更精緻的東西?