'加注'挂在红宝石

时间:2014-11-24 15:14:56

标签: ruby hook

在ruby中完成任何raise后,有没有办法挂钩某些代码?我们的想法是在集中位置提供有关错误的一些额外信息,如下所示:

def after_raise
  logger.error "some information here"
end

def logger
  @logger ||= Logger.new(my_log_output)
end

编辑:如果我更具体地了解这是为了什么,也许会有所帮助。

我正在处理一个包含多个域的大型项目。有些时候,引发的错误只是描述性不够 - 今天我和我的一个团队成员谈过,我们讨论了解决这个问题的方法。并不是原来的加注信息很糟糕/完全不明显(尽管我确定在一两个地方就是这种情况),只是随着项目的发展,新的信息已经有了对故障排除很有用。我们想创建一些可以扩展现有代码的东西。

每个域都可以单独测试,但可以插入整个基础架构。如果我们将此添加到主要'域,当应用程序作为一个整体运行时(例如,在端到端测试期间),这将应用于调用raise的所有实例。如果我们测试单个域,则不适用。

1 个答案:

答案 0 :(得分:2)

您可以重新定义Kernel#raise方法,通过别名保留原始方法:

module Kernel
  alias_method :_raise, :raise # original method is now _raise

  def raise(*args)
    # do hook stuff
    _raise(*args)
  end
end