lib/flirt.rb in flirt-0.0.2 vs lib/flirt.rb in flirt-0.0.3

- old
+ new

@@ -1,11 +1,12 @@ require "flirt/version" require "flirt/callback" require "flirt/listener" -# The Flirt module provides the main interface for dealing with 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. + module Flirt class << self def publish(event_name, event_data) @@ -15,64 +16,73 @@ callback.call(event_data) end end alias_method :broadcast, :publish + def subscribe(object, event_name, options = {}) check_subscription_arguments(event_name, object, options) callback = Flirt::Callback.new object: object, callback_name: options[:with] add_callback(event_name, callback) end alias_method :listen, :subscribe + 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 alias_method :unlisten, :unsubscribe + 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 + 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 + 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 object") if object.nil? raise ArgumentError.new("You must pass an event name") unless event_name.is_a? Symbol end end - end