我在某些应用程序中有一个收集敏感信息的自定义库。
这些信息来自各种网站,例如:Twitter、Facebook、政府博客、大学网站和普通博客。
我为每个源创建了一个解析器,因为其中一些写得不好,其中一些需要一些硬编码解析(正则表达式和其他东西)。
一切正常。几天前,我在我的监控工具中看到了客户端的一些异常。当我去寻找它时,我发现我的一个“观看”网站已经更改了它们的 HTML+CSS,所以我不得不重新实现该网站的解析器。
所以这让我想,如果其他网站也改变了他们的标记会发生什么?
所以我让我所有的解析器都为我的监视器提出了自定义异常来记录。但是当谈到红宝石时,我知道我可以做一些更精细的事情。
我的问题是:有没有办法在我的应用程序中捕获所有异常,添加自定义行为,如前置过滤器,并让其他人触发他们的默认操作?
为了显示:
如果我遇到解析器错误,我的 twitter 解析器中有这个异常:raise Twitter::ParserError
在某个地方,在初始化程序或其他东西中,我有这个寄存器(这就是我想要的):
# after 5 exceptions of Twitter::ParserError i want to act
registerException(Twitter::ParserError, 5.times) do
# Send me an email warning me about this error
# or do something with my environment
# Parser.find_by_website(website: :twitter).report_offline
end