Class: Support::Events::DomainEventPublisher

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/hecks/domain/templates/lib/support/events/domain_event_publisher.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDomainEventPublisher

Returns a new instance of DomainEventPublisher.



6
7
8
# File 'lib/hecks/domain/templates/lib/support/events/domain_event_publisher.rb', line 6

def initialize
  @subscribers = []
end

Instance Attribute Details

#subscribersObject (readonly)

Returns the value of attribute subscribers.



5
6
7
# File 'lib/hecks/domain/templates/lib/support/events/domain_event_publisher.rb', line 5

def subscribers
  @subscribers
end

Class Method Details

.cancel_subscription(subscriber) ⇒ Object



18
19
20
# File 'lib/hecks/domain/templates/lib/support/events/domain_event_publisher.rb', line 18

def self.cancel_subscription(subscriber)
  instance.subscribers.delete(subscriber)
end

.emit(command, &block) ⇒ Object



10
11
12
# File 'lib/hecks/domain/templates/lib/support/events/domain_event_publisher.rb', line 10

def self.emit(command, &block)
  instance.emit(DomainEvent.new(command), &block)
end

.subscribe(subscriber) ⇒ Object



14
15
16
# File 'lib/hecks/domain/templates/lib/support/events/domain_event_publisher.rb', line 14

def self.subscribe(subscriber)
  instance.subscribers << subscriber
end

Instance Method Details

#emit(domain_event) {|domain_event| ... } ⇒ Object

Yields:

  • (domain_event)


22
23
24
25
26
27
28
29
30
# File 'lib/hecks/domain/templates/lib/support/events/domain_event_publisher.rb', line 22

def emit(domain_event, &block)
  yield domain_event if block
  @subscribers.each do |subscriber|
    next unless subscriber.domain_event == '*' ||
                subscriber.domain_event == domain_event.type

    subscriber.notify(domain_event)
  end
end