Sha256: a53578462326bb7f12ca41cb347c201f0caa1b14621724d8355ce8b6fec350a3

Contents?: true

Size: 792 Bytes

Versions: 2

Compression:

Stored size: 792 Bytes

Contents

module Space
  module Events
    autoload :Buffer, 'space/events/buffer'
    autoload :Event,  'space/events/event'

    attr_reader :buffer

    def buffering
      @buffer = Buffer.new
      yield.tap do
        buffer, @buffer = @buffer, nil
        buffer.flush
      end
    end

    def buffering?
      !!@buffer
    end

    def observers
      @observers ||= []
    end

    def subscribe(observer)
      observers << observer
    end

    def notify(*args)
      event = args.first.is_a?(Event) ? args.first : Event.new(self, *args)
      App.logger.debug "Event on #{self.class.name.split('::').last}: #{event.source.class.name.split('::').last} #{event.event.inspect}"
      buffering? ? buffer.push(event) : observers.each { |observer| observer.notify(event) }
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
space-0.0.5 lib/space/events.rb
space-0.0.4 lib/space/events.rb