Class: EventStoreRuby::EventStream

Inherits:
Object
  • Object
show all
Defined in:
lib/eventstore_ruby/event_stream.rb

Overview

In-memory append-only event sequence.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeEventStream

Returns a new instance of EventStream.



6
7
8
9
10
# File 'lib/eventstore_ruby/event_stream.rb', line 6

def initialize
  @event_records = []
  @last_sequence_number = 0
  @mutex = Mutex.new
end

Instance Attribute Details

#event_recordsObject (readonly)

Returns the value of attribute event_records.



4
5
6
# File 'lib/eventstore_ruby/event_stream.rb', line 4

def event_records
  @event_records
end

Instance Method Details

#append(events) ⇒ Object

Appends Event objects, returns newly created EventRecord objects.

Raises:

  • (ArgumentError)


13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/eventstore_ruby/event_stream.rb', line 13

def append(events)
  raise ArgumentError, 'events must be an Array' unless events.is_a?(Array)

  @mutex.synchronize do
    records = events.map do |event|
      EventRecord.new(
        sequence_number: (@last_sequence_number += 1),
        timestamp: Time.now,
        event_type: event.event_type,
        payload: event.payload
      )
    end
    @event_records.concat(records)
    records
  end
end