2

我有一个通知系统,当guard-rspec 失败时,它会点亮一个红色的LED,当它通过时,它会点亮绿色,这一切都很好,但我正在寻找一种方法在我退出时关闭灯(或守卫崩溃)。

我想知道是否有办法捕捉“退出”事件并运行一些代码?

此外,有没有办法捕捉异常(如“错误”事件)?

4

1 回答 1

3

使用警卫回调

根据https://github.com/guard/guard/wiki/Create-a-guard#stop当 Guard 退出时调用该方法。

Guard 自述文件的回调部分表明您可以在#stop方法运行之前或之后挂钩该方法。没有迹象表明如果 Guard 崩溃,此方法将运行任何东西,因此它可能仅适用于干净退出。

这是我要开始的未经测试的示例。

# Guardfile

require 'led'

guard :rspec do
    watch('spec/*')

    callback(:stop_end) { set_led(:off) }
end

使用包装脚本

您可以创建一个 Ruby 脚本来运行 Guard,阻止并在 Guard 完成运行后关闭灯,即使崩溃也是如此。

#!/usr/bin/env ruby
# wrapper.rb

require 'led'

system("guard")
set_led(:off)

phoet 的 at_exit 建议

假设任何崩溃的 Guard 都不会干扰at_exit回调,这个方法应该和包装脚本一样工作。

# Guardfile

require 'led'

at_exit { set_led(:off) }

guard :rspec do
    watch('spec/*')
end

我通过运行 Guard 测试了这个方法,然后在一个单独的终端中......

$ pkill -15 -f guard     # same as Ctrl-c, triggers at_exit
$ pkill -9  -f guard     # kills ruby, does not trigger at_exit
于 2013-10-29T00:55:04.337 回答