module LIFX::LAN::Observable
@private
Public Instance Methods
add_observer(obj, type, &callback)
click to toggle source
# File lib/lifx/lan/observable.rb, line 8 def add_observer(obj, type, &callback) if !callback_type_exists?(type) raise ObserverCallbackNotFound.new("Callback #{type} not found in #{observer_callback_definition.keys}") end if !callback_has_required_keys?(type, callback) raise ObserverCallbackMismatch.new end observers[type][obj] = callback end
callback_has_required_keys?(type, callback)
click to toggle source
# File lib/lifx/lan/observable.rb, line 39 def callback_has_required_keys?(type, callback) (required_keys_for_callback(type) - required_keys_in_proc(callback)).empty? end
callback_type_exists?(type)
click to toggle source
# File lib/lifx/lan/observable.rb, line 35 def callback_type_exists?(type) !!observer_callback_definition[type] end
notify_observers(type, **args)
click to toggle source
# File lib/lifx/lan/observable.rb, line 26 def notify_observers(type, **args) if !callback_type_exists?(type) raise ObserverCallbackNotFound.new("Callback #{type} not found in #{observer_callback_definition.keys}") end observers[type].each do |_, callback| callback.call(**args) end end
observer_callback_definition()
click to toggle source
# File lib/lifx/lan/observable.rb, line 43 def observer_callback_definition {} end
observers()
click to toggle source
# File lib/lifx/lan/observable.rb, line 61 def observers @_observers ||= Hash.new { |h, k| h[k] = {} } end
remove_observer(obj, type)
click to toggle source
# File lib/lifx/lan/observable.rb, line 18 def remove_observer(obj, type) observers[type].delete(obj) end
remove_observers()
click to toggle source
# File lib/lifx/lan/observable.rb, line 22 def remove_observers observers.clear end
required_keys_for_callback(type)
click to toggle source
# File lib/lifx/lan/observable.rb, line 47 def required_keys_for_callback(type) @_required_keys_for_callback ||= {} @_required_keys_for_callback[type] ||= begin return [] if !observer_callback_definition[type] required_keys_in_proc(observer_callback_definition[type]) end end
required_keys_in_proc(proc)
click to toggle source
# File lib/lifx/lan/observable.rb, line 55 def required_keys_in_proc(proc) proc.parameters.select do |type, _| type == :keyreq end.map(&:last) end