Module: SignalEmitterModule

Defined in:
lib/puppet/external/event-loop/signal-system.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(object) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
# File 'lib/puppet/external/event-loop/signal-system.rb', line 23

def self.extended (object)
  if object.kind_of? Module and not object < SignalEmitter
    if object.respond_to? :fcall
      # This is the way to call private methods
      # in Ruby 1.9 as of November 16.
      object.fcall :include, SignalEmitter
    else
      object.__send__ :include, SignalEmitter
    end
  end
end

Instance Method Details

#define_signal(name, slot = :before, &body) ⇒ Object



35
36
37
38
39
40
41
42
# File 'lib/puppet/external/event-loop/signal-system.rb', line 35

def define_signal (name, slot=:before, &body)
  # Can't use `define_method' and take a block pre-1.9.
  class_eval %{ def on_#{name} &block
    add_signal_handler(:#{name}, &block) end }
  define_signal_handler(name, :before, &lambda {|*a|})
  define_signal_handler(name, :after, &lambda {|*a|})
  define_signal_handler(name, slot, &body) if block_given?
end

#define_signal_handler(name, slot = :before, &body) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
# File 'lib/puppet/external/event-loop/signal-system.rb', line 48

def define_signal_handler (name, slot=:before, &body)
  case slot
  when :before
    define_protected_method "handle_#{name}", &body
  when :after
    define_protected_method "after_handle_#{name}", &body
  else
    raise ArgumentError, "invalid slot `#{slot.inspect}'; " +
      "should be `:before' or `:after'", caller(1)
  end
end

#define_signals(*names, &body) ⇒ Object



44
45
46
# File 'lib/puppet/external/event-loop/signal-system.rb', line 44

def define_signals (*names, &body)
  names.each { |x| define_signal(x, &body) }
end