Class: Kaal::SignalHandlerChain
- Inherits:
-
Object
- Object
- Kaal::SignalHandlerChain
- Defined in:
- lib/kaal/runtime/signal_handler_chain.rb,
sig/kaal/runtime/signal_handler_chain.rbs
Overview
Invokes a previously registered signal handler when it is safe to do so.
Constant Summary collapse
- RESERVED_COMMAND_HANDLERS =
%w[DEFAULT IGNORE].freeze
Instance Method Summary collapse
- #call ⇒ void
-
#initialize(signal:, previous_handler:, logger:) ⇒ SignalHandlerChain
constructor
A new instance of SignalHandlerChain.
- #invoke_callable(*args) ⇒ Kaal::rbs_any
Constructor Details
#initialize(signal:, previous_handler:, logger:) ⇒ SignalHandlerChain
Returns a new instance of SignalHandlerChain.
12 13 14 15 16 |
# File 'lib/kaal/runtime/signal_handler_chain.rb', line 12 def initialize(signal:, previous_handler:, logger:) @signal = signal @previous_handler = previous_handler @logger = logger end |
Instance Method Details
#call ⇒ void
This method returns an undefined value.
18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/kaal/runtime/signal_handler_chain.rb', line 18 def call(...) return unless @previous_handler case @previous_handler when Proc, Method invoke_callable(...) when String return if RESERVED_COMMAND_HANDLERS.include?(@previous_handler) @logger&.debug("Previous #{@signal} handler was a command: #{@previous_handler}") end end |
#invoke_callable(*args) ⇒ Kaal::rbs_any
33 34 35 36 37 38 39 40 |
# File 'lib/kaal/runtime/signal_handler_chain.rb', line 33 def invoke_callable(*args) arity = @previous_handler.arity return @previous_handler.call if arity.zero? argument_length = args.length argument_count = arity.negative? ? argument_length : [arity, argument_length].min @previous_handler.call(*args.first(argument_count)) end |