class Multitrap::Trap
Constants
- KNOWN_SIGNALS
- OWN_MRI_FRAME
- OWN_RBX_FRAME
- RESERVED_SIGNALS
- TRAVIS_FRAME
Public Class Methods
__clear_all_handlers!()
click to toggle source
# File lib/multitrap/trap.rb, line 22 def self.__clear_all_handlers! @@multitrap ||= nil @@multitrap && @@multitrap.__clear_all_handlers! end
new(original_trap)
click to toggle source
# File lib/multitrap/trap.rb, line 27 def initialize(original_trap) @original_trap = original_trap @trap_list = create_trap_list end
trap(original_trap, *args, &block)
click to toggle source
# File lib/multitrap/trap.rb, line 13 def self.trap(original_trap, *args, &block) @@multitrap ||= new(original_trap) signal = args[0] command = args[1] @@multitrap.store_trap(signal, command, &block) end
Public Instance Methods
__clear_all_handlers!()
click to toggle source
# File lib/multitrap/trap.rb, line 62 def __clear_all_handlers! @trap_list.keys.select {|s| KNOWN_SIGNALS.include?(s) }.each do |signal| @original_trap.call(signal, 'DEFAULT') end @trap_list = create_trap_list end
store_trap(signal, command, &block)
click to toggle source
# File lib/multitrap/trap.rb, line 32 def store_trap(signal, command, &block) signal = signal.to_s command ||= block trap_is_nested = nested_trap? if trap_is_nested # JRuby doesn't support nested traps. return if Multitrap.jruby? @trap_list[signal].pop end @trap_list[signal] << command prev_trap_handler = @original_trap.call(signal) do |signo| @trap_list[signal].reverse_each do |trap_handler| trap_handler.call(signo || Signal.list[signal]) end end if !trap_is_nested && @trap_list[signal].size == 1 && !default_handler?(prev_trap_handler) && !default_handler_path?(prev_trap_handler) @trap_list[signal].unshift(prev_trap_handler) end @trap_list end
Private Instance Methods
create_trap_list()
click to toggle source
# File lib/multitrap/trap.rb, line 89 def create_trap_list Hash.new { |h, k| h[k] = [] } end
default_handler?(prev)
click to toggle source
# File lib/multitrap/trap.rb, line 93 def default_handler?(prev) ['DEFAULT', 'SYSTEM_DEFAULT', 'IGNORE'].any? { |h| h == prev } end
default_handler_path?(prev)
click to toggle source
# File lib/multitrap/trap.rb, line 97 def default_handler_path?(prev) [%r{Proc:.+@kernel/loader\.rb:[0-9]{1,4}}, %r{Proc:.+@uri:classloader:/jruby/kernel/signal.rb:[0-9]{1,4}}].any? do |h| h =~ prev.to_s end end