class MIDIEye::Event
User defined callbacks for input events
Public Class Methods
new()
click to toggle source
# File lib/midi-eye/event.rb, line 10 def initialize @event = [] @queue = Queue.new end
Public Instance Methods
add(options = {}, &callback)
click to toggle source
Add a user-defined input callback @param [Hash] options @param [Proc] callback @return [Hash]
# File lib/midi-eye/event.rb, line 33 def add(options = {}, &callback) name = options[:listener_name] options.delete(:listener_name) event = { :conditions => options, :proc => callback, :listener_name => name } @event << event event end
clear()
click to toggle source
Clear the collection of events @return [Boolean]
# File lib/midi-eye/event.rb, line 23 def clear @event.clear @queue.clear true end
delete(name)
click to toggle source
Delete an event by name @param [String, Symbol] name
# File lib/midi-eye/event.rb, line 17 def delete(name) @event.delete_if { |event| event[:listener_name].to_s == name.to_s } end
enqueue(action, message)
click to toggle source
Add an event to the trigger queue @return [Hash]
# File lib/midi-eye/event.rb, line 64 def enqueue(action, message) event = { :action => action, :message => message } @queue << event event end
enqueue_all(message)
click to toggle source
Enqueue all events with the given message @return [Array<Hash>]
# File lib/midi-eye/event.rb, line 58 def enqueue_all(message) @event.map { |action| enqueue(action, message) } end
trigger_enqueued()
click to toggle source
Trigger all enqueued events @return [Fixnum] The number of triggered events
# File lib/midi-eye/event.rb, line 47 def trigger_enqueued counter = 0 while !@queue.empty? do counter += 1 trigger(@queue.shift) end counter end
Private Instance Methods
meets_conditions?(conditions, message)
click to toggle source
Does the given message meet the given conditions?
# File lib/midi-eye/event.rb, line 76 def meets_conditions?(conditions, message) results = conditions.map do |key, value| if message.respond_to?(key) if value.kind_of?(Array) value.include?(message.send(key)) else value.eql?(message.send(key)) end else false end end results.all? end
trigger(event)
click to toggle source
Trigger an event
# File lib/midi-eye/event.rb, line 92 def trigger(event) action = event[:action] conditions = action[:conditions] if conditions.nil? || meets_conditions?(conditions, event[:message][:message]) begin action[:proc].call(event[:message]) rescue Exception => exception Thread.main.raise(exception) end end end