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

Instance Method Details

#__maybe_initialize_signal_observerObject



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