Extract code from signal handlers into methods
This will allow building other mechanisms to interact with Guard, for example on JRuby, where signal handling tends to be unreliable.
This commit is contained in:
parent
815a81dd54
commit
70c15a7c94
@ -1,29 +1,41 @@
|
|||||||
module Guard
|
module Guard
|
||||||
module Interactor
|
module Interactor
|
||||||
|
extend self
|
||||||
|
|
||||||
def self.init_signal_traps
|
def run_all
|
||||||
# Run all (Ctrl-\)
|
|
||||||
Signal.trap('QUIT') do
|
|
||||||
::Guard.run do
|
::Guard.run do
|
||||||
::Guard.guards.each { |guard| ::Guard.supervised_task(guard, :run_all) }
|
::Guard.guards.each { |guard| ::Guard.supervised_task(guard, :run_all) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Stop (Ctrl-C)
|
def stop
|
||||||
Signal.trap('INT') do
|
|
||||||
UI.info "Bye bye...", :reset => true
|
UI.info "Bye bye...", :reset => true
|
||||||
::Guard.listener.stop
|
::Guard.listener.stop
|
||||||
::Guard.guards.each { |guard| ::Guard.supervised_task(guard, :stop) }
|
::Guard.guards.each { |guard| ::Guard.supervised_task(guard, :stop) }
|
||||||
abort("\n")
|
abort("\n")
|
||||||
end
|
end
|
||||||
|
|
||||||
# Reload (Ctrl-Z)
|
def reload
|
||||||
Signal.trap('TSTP') do
|
|
||||||
::Guard.run do
|
::Guard.run do
|
||||||
::Guard.guards.each { |guard| ::Guard.supervised_task(guard, :reload) }
|
::Guard.guards.each { |guard| ::Guard.supervised_task(guard, :reload) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.init_signal_traps
|
||||||
|
# Run all (Ctrl-\)
|
||||||
|
Signal.trap('QUIT') do
|
||||||
|
run_all
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Stop (Ctrl-C)
|
||||||
|
Signal.trap('INT') do
|
||||||
|
stop
|
||||||
|
end
|
||||||
|
|
||||||
|
# Reload (Ctrl-Z)
|
||||||
|
Signal.trap('TSTP') do
|
||||||
|
reload
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
25
spec/guard/interactor_spec.rb
Normal file
25
spec/guard/interactor_spec.rb
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe Guard::Interactor do
|
||||||
|
subject { Guard::Interactor }
|
||||||
|
let(:guard) { mock "guard" }
|
||||||
|
before :each do
|
||||||
|
Guard.stub!(:guards).and_return([guard])
|
||||||
|
Guard.stub!(:listener).and_return(mock(:start => nil, :stop => nil))
|
||||||
|
end
|
||||||
|
|
||||||
|
it ".run_all should send :run_all to all guards" do
|
||||||
|
guard.should_receive(:run_all)
|
||||||
|
subject.run_all
|
||||||
|
end
|
||||||
|
|
||||||
|
it ".stop should send :stop to all guards" do
|
||||||
|
guard.should_receive(:stop)
|
||||||
|
lambda { subject.stop }.should raise_error(SystemExit)
|
||||||
|
end
|
||||||
|
|
||||||
|
it ".reload should send :reload to all guards" do
|
||||||
|
guard.should_receive(:reload)
|
||||||
|
subject.reload
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user