class RubyHid::Observer
Observer
parent class, shared code used by all the controller observer classes:
Shared functionality keeps an in-memory array of each controller event which has been referred to.
Constants
- EVENTS
Dummy events hash, this should be set in the individual observer classes.
Attributes
events will be an array of lambdas
events will be an array of lambdas
events will be an array of lambdas
Public Class Methods
Create an observer object to observe all of this kind of observer
If this isn’t called directly, it will be created as required when find or find_by_name
are called.
# File lib/ruby_hid/observer.rb, line 31 def self.build self::EVENTS.each { |code, name| self.new(code, name) } end
Find an observer of this type by its event code. Used by trigger_key to find an observer when its controller is used.
Arguments:
-
code - Integer, event code to retrieve button by.
# File lib/ruby_hid/observer.rb, line 59 def self.find(code) btn = @@observers.detect { |b| b.code == code } if btn.nil? btn = self.make_from_code(code) end btn end
Find an observer of this type by its event code.
Arguments:
-
name - Symbol, a known button name (from BUTTONS)
# File lib/ruby_hid/observer.rb, line 91 def self.find_by_name(name) btn = @@observers.detect { |b| b.name == name } if btn.nil? btn = self.make_from_name(name) end btn end
Create an observer object of this type from a known code. used by find when the observer has not been initialised.
Arguments:
-
code - Integer, event code to retrieve button by.
# File lib/ruby_hid/observer.rb, line 75 def self.make_from_code(code) name = EVENTS[code] if name self.new(code, name) else nil end end
Create an observer of this type from a known name. Used in find_by_name
when the observer has not been initialised.
Arguments:
-
name - symbol, a known button name
# File lib/ruby_hid/observer.rb, line 108 def self.make_from_name(name) code, btn_name = self::EVENTS.detect { |code, btn_name| btn_name == name } if code self.new(code, name) else nil end end
Initialize a control observer
Arguments:
-
code - Integer, the event code generated by this button
-
name - Symbol, the name of the button
# File lib/ruby_hid/observer.rb, line 43 def initialize(code, name) @code = code @name = name @events = [] @@observers << self end
Find an observer of this type and run all of it’s events.
Used by RubyHid::Device
when a control change is detected.
Arguments:
-
code - Integer, event code to retrieve button by.
# File lib/ruby_hid/observer.rb, line 150 def self.trigger_event(code, value=nil) btn = self.find(code) if btn btn.trigger_events(value) else puts unmapped_event_message(code) end rescue => er puts "Error in observer #{code} event: #{er.message}" puts er.backtrace end
# File lib/ruby_hid/observer.rb, line 162 def self.unmapped_event_message(code) <<-TEXT ============================================================== #{self} with event code #{code} has not been mapped. Please add it to #{self}::EVENTS with a name. ============================================================== TEXT end
Public Instance Methods
Add a process to be triggered when this observers controller is changed.
Arguments:
-
proc - Proc, ruby method to be called, without arguments on button press.
# File lib/ruby_hid/observer.rb, line 126 def add_event(proc) @events << proc end
Trigger every proc in the @events array.
# File lib/ruby_hid/observer.rb, line 133 def trigger_events(value=nil) @events.each do |event| event.call(value) end end