Class: EventStoreRuby::MemoryEventStore

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

Overview

Fully in-memory EventStore implementation.

Instance Method Summary collapse

Constructor Details

#initialize(notifier: MemoryEventStreamNotifier.new) ⇒ MemoryEventStore



4
5
6
7
8
# File 'lib/eventstore_ruby/memory_event_store.rb', line 4

def initialize(notifier: MemoryEventStreamNotifier.new)
  @event_stream = EventStream.new
  @notifier = notifier
  @lock = ReadWriteLockFIFO.new
end

Instance Method Details

#append(events, filter = nil, expected_max_sequence_number: nil) ⇒ Object

Raises:

  • (ArgumentError)


21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/eventstore_ruby/memory_event_store.rb', line 21

def append(events, filter = nil, expected_max_sequence_number: nil)
  raise ArgumentError, 'events must be an Array' unless events.is_a?(Array)

  @lock.acquire_write
  begin
    if expected_max_sequence_number
      current_query_result = query_with_lock(filter, nil) # Already under write lock, no read lock needed
      if current_query_result.max_sequence_number != expected_max_sequence_number
        raise 'eventstore-stores-memory-err05: Context changed: events were modified between query() and append()'
      end
    end

    event_records = @event_stream.append(events)
    @notifier.notify(event_records)
  ensure
    @lock.release_write
  end
end

#query(filter = nil) ⇒ Object

Query events with optional filter. Returns QueryResult.



12
13
14
# File 'lib/eventstore_ruby/memory_event_store.rb', line 12

def query(filter = nil)
  query_with_lock(filter, @lock)
end

#query_allObject

Convenience: return all events in the store



17
18
19
# File 'lib/eventstore_ruby/memory_event_store.rb', line 17

def query_all
  query(nil)
end

#subscribe(&handle) ⇒ Object



40
41
42
# File 'lib/eventstore_ruby/memory_event_store.rb', line 40

def subscribe(&handle)
  @notifier.subscribe(handle)
end