Sha256: 0cf672862a9354bd53ef542c658a72144169569bbb793cef60a3e1b0fd1486ac

Contents?: true

Size: 1.57 KB

Versions: 1

Compression:

Stored size: 1.57 KB

Contents

require "flirt/version"
require "flirt/callback"
require "flirt/listener"
# The Flirt module provides the main interface for dealing with Flirt.
#

module Flirt

    class << self

        def broadcast(event_name, event_data)
            return if disabled
            raise ArgumentError.new("Event name must be a symbol") unless event_name.is_a? Symbol
            (callbacks[event_name] || []).each do |callback|
                callback.call(event_data)
            end
        end
        alias_method :publish, :broadcast

        def subscribe(object, event_name, options = {})
            raise ArgumentError.new("You must pass a callback")    unless options[:with].is_a? Symbol
            raise ArgumentError.new("You must pass an object")     if     object.nil?
            raise ArgumentError.new("You must pass an event name") unless event_name.is_a? Symbol
            callback = Flirt::Callback.new object: object,
                                           callback_name: options[:with]
            add_callback(event_name, callback)
        end
        alias_method :listen, :subscribe

        def enable
            self.disabled = false
        end

        def disable
            self.disabled = true
        end

        def clear
            @callbacks = {}
        end

        private

        attr_reader   :callbacks
        attr_accessor :disabled

        def callbacks
            @callbacks ||= {}
        end

        def add_callback(event_name, callback)
            callbacks[event_name] ||= []
            callbacks[event_name] << callback
        end

    end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
flirt-0.0.1 lib/flirt.rb