module Flirt

The Flirt module provides the main interface for dealing with Flirt. Callbacks can be registered or unregistered against events, and Flirt can be enabled or disabled.

Represents a single callback. Contains knowledge of the callback name and object and contains a method for calling the callback.

class MyListener

include Flirt::Listener

def initialize
    subscribe_to :picked, with: :picked_callback
end

def picked_callback(event_data)
    puts "The #{event_data[:fruit]} has been picked"
end

end

or:

class MyListener

extend Flirt::Listener

subscribe_to :picked, with: :picked_callback

def self.picked_callback(event_data)
    puts "The #{event_data[:fruit]} has been picked"
end

end

Constants

VERSION

Attributes

callbacks[R]
disabled[RW]
disabled_list[RW]
enabled_list[RW]

Public Class Methods

clear() click to toggle source
# File lib/flirt.rb, line 61
def clear
    @callbacks = {}
end
disable(opts = {}) click to toggle source
# File lib/flirt.rb, line 50
def disable(opts = {})
    clear_event_lists
    if opts[:only]
        set_disabled opts[:only]
        self.disabled = false
    else
        self.disabled = true
    end
end
enable(opts = {}) click to toggle source
# File lib/flirt.rb, line 41
def enable(opts = {})
    clear_event_lists
    if opts[:only]
        set_enabled opts[:only]
    end
    self.disabled = false
end
publish(event_name, event_data) click to toggle source
# File lib/flirt.rb, line 12
def publish(event_name, event_data)
    return if disabled
    return if disabled_list && disabled_list.include?(event_name)
    return if enabled_list && !enabled_list.include?(event_name)
    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
subscribe(object, event_name, options = {}) click to toggle source
# File lib/flirt.rb, line 24
def subscribe(object, event_name, options = {})
    check_subscription_arguments(event_name, object, options)
    callback = Flirt::Callback.new object:        object,
                                   callback_name: options[:with],
                                   weakref:       options[:weakref]
    add_callback(event_name, callback)
end
unsubscribe(object, event_name, options = {}) click to toggle source
# File lib/flirt.rb, line 33
def unsubscribe(object, event_name, options = {})
    check_subscription_arguments(event_name, object, options)
    callback = Flirt::Callback.new object: object,
                                   callback_name: options[:with]
    remove_callback(event_name, callback)
end

Private Class Methods

add_callback(event_name, callback) click to toggle source
# File lib/flirt.rb, line 77
def add_callback(event_name, callback)
    callbacks[event_name] ||= []
    callbacks[event_name] << callback
end
check_subscription_arguments(event_name, object, options) click to toggle source
# File lib/flirt.rb, line 112
def check_subscription_arguments(event_name, object, options)
    raise ArgumentError.new("You must pass a callback")    unless options[:with].is_a? Symbol
    raise ArgumentError.new("You must pass an event name") unless event_name.is_a? Symbol
    raise ArgumentError.new("You must pass an object")     if     object.nil?
end
clear_event_lists() click to toggle source
# File lib/flirt.rb, line 93
def clear_event_lists
    self.enabled_list  = nil
    self.disabled_list = nil
end
remove_callback(event_name, callback_to_delete) click to toggle source
# File lib/flirt.rb, line 103
def remove_callback(event_name, callback_to_delete)
    return unless callbacks[event_name]

    callbacks[event_name].each do |callback|
        callbacks[event_name].delete(callback) if callback == callback_to_delete
    end
end
set_disabled(events) click to toggle source
# File lib/flirt.rb, line 83
def set_disabled(events)
    self.disabled_list = wrap_event_list(events)
end
set_enabled(events) click to toggle source
# File lib/flirt.rb, line 88
def set_enabled(events)
    self.enabled_list = wrap_event_list(events)
end
wrap_event_list(events) click to toggle source
# File lib/flirt.rb, line 99
def wrap_event_list(events)
    events.is_a?(Array) ? events : [events]
end