class EvilEvents::Core::Events::Manager

@api private @since 0.1.0

Attributes

event_class[R]

@return [EvilEvents::Core::Events::AbstractEvent]

@since 0.1.0

subscribers[R]

@return [Concurrent::Array<EvilEvents::Core::Events::Subscriber>]

@since 0.1.0

Public Class Methods

new(event_class) click to toggle source

@param event_class [Class{EvilEvents::Core::Events::AbstractEvent}]

@since 0.1.0

# File lib/evil_events/core/events/manager.rb, line 20
def initialize(event_class)
  @event_class = event_class
  @subscribers = SubscriberList.new
end

Public Instance Methods

event_type() click to toggle source

@return [String, Symbol]

@since 0.1.0

# File lib/evil_events/core/events/manager.rb, line 55
def event_type
  event_class.type
end
notify(event) click to toggle source

@param event [EvilEvents::Core::Events::AbstractEvent] @raise [EvilEvents::InconsistentEventClassError] @raise [EvilEvents::FailingSubscribersError]

@return void

@since 0.1.0

# File lib/evil_events/core/events/manager.rb, line 47
def notify(event)
  raise EvilEvents::InconsistentEventClassError unless supported_event?(event)
  EvilEvents::Core::Bootstrap[:event_system].process_event_notification(self, event)
end
observe(raw_subscriber, delegator = nil) click to toggle source

@param raw_subscriber [Object] @param delegator [Symbol, String, NilClass] @raise [EvilEvents::InvalidDelegatorTypeError] @return void

@since 0.1.0

# File lib/evil_events/core/events/manager.rb, line 31
def observe(raw_subscriber, delegator = nil)
  case delegator
  when NilClass, Symbol, String
    subscribers.push(create_event_subscriber(raw_subscriber, delegator))
  else
    raise EvilEvents::InvalidDelegatorTypeError
  end
end

Private Instance Methods

create_event_subscriber(raw_subscriber, delegator) click to toggle source

@param raw_subscriber [Object] @param delegator [Symbol, String, NilClass] @return [EvilEvents::Core::Events::Subscriber]

@since 0.1.0

# File lib/evil_events/core/events/manager.rb, line 74
def create_event_subscriber(raw_subscriber, delegator)
  delegation = -> { delegator || event_class.default_delegator }
  resolver   = EvilEvents::Shared::DelegatorResolver.new(delegation)
  EvilEvents::Core::Events::Subscriber.new(raw_subscriber, resolver)
end
supported_event?(event) click to toggle source

@param event [EvilEvents::Core::Events::AbstractEvent] @return [Boolean]

@since 0.3.0

# File lib/evil_events/core/events/manager.rb, line 65
def supported_event?(event)
  event.is_a?(event_class)
end