Sha256: b4cdd2a6b60df287b9d49a94815f1de461294faaaed1b21caad6d99b0e41aefd

Contents?: true

Size: 743 Bytes

Versions: 3

Compression:

Stored size: 743 Bytes

Contents

module BubbleWrap
  module Reactor
    # A simple mixin that adds events to your object.
    module Eventable

      # When `event` is triggered the block will execute
      # and be passed the arguments that are passed to
      # `trigger`.
      def on(event, &blk)
        events[event].push blk
      end

      # When `event` is triggered, do not call the given
      # block any more
      def off(event, &blk)
        events[event].delete_if { |b| b == blk }
        blk
      end

      # Trigger an event
      def trigger(event, *args)
        events[event].map do |event|
          event.call(*args)
        end
      end

      private

      def events
        @events ||= Hash.new { |h,k| h[k] = [] }
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
bubble-wrap-1.3.0.osx motion/reactor/eventable.rb
bubble-wrap-1.2.0 motion/reactor/eventable.rb
bubble-wrap-1.2.0.pre motion/reactor/eventable.rb