警卫事件处理程序(退出时)?

时间:2013-10-28 17:24:29

标签: ruby rspec guard

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

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

另外,有没有办法捕获异常(比如'on error'事件)?

1 个答案:

答案 0 :(得分:3)

使用Guard Callbacks

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

Guard的自述文件的Callback部分表示您可以在运行之前或之后挂钩#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