我有一个通知系统,当guard-rspec 失败时,它会点亮一个红色的LED,当它通过时,它会点亮绿色,这一切都很好,但我正在寻找一种方法在我退出时关闭灯(或守卫崩溃)。
我想知道是否有办法捕捉“退出”事件并运行一些代码?
此外,有没有办法捕捉异常(如“错误”事件)?
根据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)
假设任何崩溃的 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