Class: Realm::EventRouter

Inherits:
Object
  • Object
show all
Includes:
Mixins::DependencyInjection
Defined in:
lib/realm/event_router.rb,
lib/realm/event_router/gateway.rb,
lib/realm/event_router/internal_loop_gateway.rb

Defined Under Namespace

Classes: Gateway, InternalLoopGateway

Instance Method Summary collapse

Methods included from Mixins::DependencyInjection

included

Constructor Details

#initialize(gateways_spec, prefix: nil) ⇒ EventRouter

Returns a new instance of EventRouter.



18
19
20
21
22
23
# File 'lib/realm/event_router.rb', line 18

def initialize(gateways_spec, prefix: nil)
  @prefix = prefix
  @auto_registered = false
  @default_namespace = nil
  init_gateways(gateways_spec)
end

Instance Method Details

#active_queuesObject



45
46
47
48
49
50
# File 'lib/realm/event_router.rb', line 45

def active_queues
  auto_register_handlers
  @gateways.values.reduce([]) do |queues, gateway|
    queues + gateway.queues
  end
end

#add_listener(event_type, listener, namespace: nil) ⇒ Object



29
30
31
# File 'lib/realm/event_router.rb', line 29

def add_listener(event_type, listener, namespace: nil)
  gateway_for(namespace).add_listener(event_type, listener)
end

#register(handler_class) ⇒ Object



25
26
27
# File 'lib/realm/event_router.rb', line 25

def register(handler_class)
  gateway_for(handler_class.try(:event_namespace)).register(handler_class)
end

#trigger(identifier, attributes = {}) ⇒ Object



33
34
35
36
# File 'lib/realm/event_router.rb', line 33

def trigger(identifier, attributes = {})
  namespace, event_type = identifier.to_s.include?('.') ? identifier.split('.') : [nil, identifier]
  gateway_for(namespace).trigger(event_type, attributes)
end

#workers(*namespaces, **options) ⇒ Object



38
39
40
41
42
43
# File 'lib/realm/event_router.rb', line 38

def workers(*namespaces, **options)
  auto_register_handlers
  @gateways.filter_map do |(namespace, gateway)|
    gateway.worker(**options) if namespaces.empty? || namespaces.include?(namespace)
  end
end