我有一个通知系统,当guard-rspec失效时它点亮一个LED红色,当它通过时,它会亮起绿色,这一切都很棒,但是我正在寻找一种方法来关闭灯,如果我退出(或警卫崩溃)。
我想知道是否有办法捕捉“退出”事件并运行一些代码?
另外,有没有办法捕获异常(比如'on error'事件)?
答案 0 :(得分:3)
每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)
假设任何崩溃的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