Class: Sigurd::SignalHandler
- Inherits:
-
Object
- Object
- Sigurd::SignalHandler
- Defined in:
- lib/sigurd/signal_handler.rb
Overview
Class that takes any object with a “start” and “stop” method and catches signals to ask them to stop nicely.
Constant Summary collapse
- SIGNALS =
%i(INT TERM QUIT).freeze
Instance Attribute Summary collapse
-
#runner ⇒ Object
readonly
Returns the value of attribute runner.
Instance Method Summary collapse
-
#initialize(runner) ⇒ SignalHandler
constructor
Takes any object that responds to the ‘start` and `stop` methods.
-
#run! ⇒ Object
Run the runner.
Constructor Details
#initialize(runner) ⇒ SignalHandler
Takes any object that responds to the ‘start` and `stop` methods.
12 13 14 15 16 |
# File 'lib/sigurd/signal_handler.rb', line 12 def initialize(runner) @signal_queue = [] @reader, @writer = IO.pipe @runner = runner end |
Instance Attribute Details
#runner ⇒ Object (readonly)
Returns the value of attribute runner.
8 9 10 |
# File 'lib/sigurd/signal_handler.rb', line 8 def runner @runner end |
Instance Method Details
#run! ⇒ Object
Run the runner.
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/sigurd/signal_handler.rb', line 19 def run! setup_signals @runner.start loop do signal = signal_queue.pop case signal when *SIGNALS @runner.stop if Sigurd.exit_on_signal exit 0 else raise(SignalException, signal) end else ready = IO.select([reader, writer]) # drain the self-pipe so it won't be returned again next time reader.read_nonblock(1) if ready[0].include?(reader) end end end |