Module: SignalObserver
- Defined in:
- lib/puppet/external/event-loop/signal-system.rb
Overview
This module is indended to be a convenience mixin to be used by classes whose objects need to observe foreign signals. That is, if you want to observe some signals coming from an object, you should mix in this module.
You cannot use this module at two different places of the same inheritance chain to observe signals coming from the same object.
XXX: This has not seen much use, and I’d like to provide a
better solution for the problem in the future.
Instance Method Summary collapse
- #__maybe_initialize_signal_observer ⇒ Object
- #absorb_signals(subject, *names) ⇒ Object
- #ignore_signal(subject, name) ⇒ Object
- #ignore_signals(subject, *names) ⇒ Object
- #map_signals(source, pairs = {}) ⇒ Object
- #observe_signal(subject, name, &handler) ⇒ Object
Instance Method Details
#__maybe_initialize_signal_observer ⇒ Object
114 115 116 117 118 119 120 |
# File 'lib/puppet/external/event-loop/signal-system.rb', line 114 def __maybe_initialize_signal_observer @observed_signals ||= Hash.new do |signals, object| signals[object] = Hash.new do |handlers, name| handlers[name] = Array.new end end end |
#absorb_signals(subject, *names) ⇒ Object
136 137 138 139 140 141 142 |
# File 'lib/puppet/external/event-loop/signal-system.rb', line 136 def absorb_signals (subject, *names) names.each do |name| observe_signal(subject, name) do |*args| __signal__(name, *args) end end end |
#ignore_signal(subject, name) ⇒ Object
148 149 150 151 152 153 |
# File 'lib/puppet/external/event-loop/signal-system.rb', line 148 def ignore_signal (subject, name) __maybe_initialize_signal_observer __ignore_signal_1(subject, name) @observed_signals.delete(subject) if @observed_signals[subject].empty? end |
#ignore_signals(subject, *names) ⇒ Object
155 156 157 158 159 |
# File 'lib/puppet/external/event-loop/signal-system.rb', line 155 def ignore_signals (subject, *names) __maybe_initialize_signal_observer names = @observed_signals[subject] if names.empty? names.each { |x| __ignore_signal_1(subject, x) } end |
#map_signals(source, pairs = {}) ⇒ Object
128 129 130 131 132 133 134 |
# File 'lib/puppet/external/event-loop/signal-system.rb', line 128 def map_signals (source, pairs={}) pairs.each do |src_name, dst_name| observe_signal(source, src_name) do |*args| __signal__(dst_name, *args) end end end |
#observe_signal(subject, name, &handler) ⇒ Object
122 123 124 125 126 |
# File 'lib/puppet/external/event-loop/signal-system.rb', line 122 def observe_signal (subject, name, &handler) __maybe_initialize_signal_observer @observed_signals[subject][name] << handler subject.add_signal_handler(name, &handler) end |