Class: Kaal::SignalHandlerInstaller
- Inherits:
-
Object
- Object
- Kaal::SignalHandlerInstaller
- Defined in:
- lib/kaal/runtime/signal_handler_installer.rb,
sig/kaal/runtime/signal_handler_installer.rbs
Overview
Installs signal handlers while preserving the previous handlers for chaining.
Constant Summary collapse
- SIGNALS =
%w[TERM INT].freeze
- IGNORE_HANDLER =
'IGNORE'
Instance Method Summary collapse
- #capture_previous_handler(signal) ⇒ Kaal::rbs_any
-
#initialize(signal_module: Signal) ⇒ SignalHandlerInstaller
constructor
A new instance of SignalHandlerInstaller.
- #install(signals: SIGNALS) {|arg0, arg1| ... } ⇒ Kaal::rbs_any
- #restore_previous_handler(signal, previous_handler) ⇒ nil, Kaal::rbs_any
Constructor Details
#initialize(signal_module: Signal) ⇒ SignalHandlerInstaller
Returns a new instance of SignalHandlerInstaller.
13 14 15 |
# File 'lib/kaal/runtime/signal_handler_installer.rb', line 13 def initialize(signal_module: Signal) @signal_module = signal_module end |
Instance Method Details
#capture_previous_handler(signal) ⇒ Kaal::rbs_any
27 28 29 30 31 |
# File 'lib/kaal/runtime/signal_handler_installer.rb', line 27 def capture_previous_handler(signal) previous_handler = @signal_module.trap(signal, IGNORE_HANDLER) restore_previous_handler(signal, previous_handler) previous_handler end |
#install(signals: SIGNALS) {|arg0, arg1| ... } ⇒ Kaal::rbs_any
17 18 19 20 21 22 23 |
# File 'lib/kaal/runtime/signal_handler_installer.rb', line 17 def install(signals: SIGNALS) signals.each_with_object({}) do |signal, previous_handlers| previous_handler = capture_previous_handler(signal) @signal_module.trap(signal) { yield(signal, previous_handler) } previous_handlers[signal] = previous_handler end end |
#restore_previous_handler(signal, previous_handler) ⇒ nil, Kaal::rbs_any
33 34 35 36 37 |
# File 'lib/kaal/runtime/signal_handler_installer.rb', line 33 def restore_previous_handler(signal, previous_handler) return unless previous_handler && previous_handler != IGNORE_HANDLER @signal_module.trap(signal, previous_handler) end |