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