module ObservableRoles::Subscriber

Public Class Methods

included(base) click to toggle source
# File lib/observable_roles.rb, line 14
def self.included(base)
  attr_accessor :subscriber_lock
  attr_reader   :captured_observable_events
  base.extend(ClassMethods)
end

Public Instance Methods

capture_observable_event(role, event_name, data={}) click to toggle source
# File lib/observable_roles.rb, line 20
def capture_observable_event(role, event_name, data={})
  return     if role.nil? || event_name.nil?
  role       = role.to_sym
  event_name = event_name.to_sym
  if self.class.get_observed_publisher_callbacks.nil? || self.class.get_observed_publisher_callbacks[role].nil? || self.class.get_observed_publisher_callbacks[role][event_name].nil?
    return
  end

  @captured_observable_events ||= []
  @captured_observable_events.push({ callback: self.class.get_observed_publisher_callbacks[role][event_name], data: data })
  release_captured_events unless @subscriber_lock
end

Private Instance Methods

release_captured_events() click to toggle source
# File lib/observable_roles.rb, line 36
def release_captured_events
  @subscriber_lock = true
  while !@captured_observable_events.empty?
    e = @captured_observable_events.shift
    e[:callback].call(self, e[:data])
  end
  @subscriber_lock = false
end