Class: Kaal::SignalHandlerInstaller

Inherits:
Object
  • Object
show all
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 =

Returns:

  • (::Array["TERM" | "INT"])
%w[TERM INT].freeze
IGNORE_HANDLER =

Returns:

  • ("IGNORE")
'IGNORE'

Instance Method Summary collapse

Constructor Details

#initialize(signal_module: Signal) ⇒ SignalHandlerInstaller

Returns a new instance of SignalHandlerInstaller.

Parameters:

  • signal_module: (Kaal::rbs_any) (defaults to: Signal)


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

Parameters:

  • signal (Kaal::rbs_any)

Returns:

  • (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

Parameters:

  • signals: (Kaal::rbs_any) (defaults to: SIGNALS)

Yields:

Yield Parameters:

  • arg0 (Kaal::rbs_any)
  • arg1 (Kaal::rbs_any)

Yield Returns:

  • (Kaal::rbs_any)

Returns:

  • (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

Parameters:

  • signal (Kaal::rbs_any)
  • previous_handler (Kaal::rbs_any)

Returns:

  • (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