Sha256: e1b13d8a37723480fec64339df83ac5a87be44136374ce8dd0ab529d5516830e

Contents?: true

Size: 1.08 KB

Versions: 4

Compression:

Stored size: 1.08 KB

Contents

module Isolate

  # A simple way to watch and extend the Isolate lifecycle.
  #
  #    Isolate::Events.watch Isolate::Sandbox, :initialized do |sandbox|
  #      puts "A sandbox just got initialized: #{sandbox}"
  #    end
  #
  # Read the source for Isolate::Sandbox and Isolate::Entry to see
  # what sort of events are fired.

  module Events

    # Watch for an event called +name+ from an instance of
    # +klass+. +block+ will be called when the event occurs. Block
    # args vary by event, but usually an instance of the relevant
    # class is passed.

    def self.watch klass, name, &block
      watchers[[klass, name]] << block
    end

    def self.fire klass, name, *args #:nodoc:
      watchers[[klass, name]].each do |block|
        block[*args]
      end
    end

    def self.watchers #:nodoc:
      @watchers ||= Hash.new { |h, k| h[k] = [] }
    end

    def fire name, after = nil, *args, &block #:nodoc:
      Isolate::Events.fire self.class, name, *args

      if after && block_given?
        yield self
        Isolate::Events.fire self.class, after, *args
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
isolate-2.0.2 lib/isolate/events.rb
isolate-2.0.1 lib/isolate/events.rb
isolate-2.0.0 lib/isolate/events.rb
isolate-2.0.0.pre.3 lib/isolate/events.rb