2012-04-04 60 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") 

或者你想要更精致的东西?