Class: RubyEventStore::InMemoryRepository

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_event_store/in_memory_repository.rb

Instance Method Summary collapse

Constructor Details

#initializeInMemoryRepository

Returns a new instance of InMemoryRepository.



7
8
9
10
11
# File 'lib/ruby_event_store/in_memory_repository.rb', line 7

def initialize
  @streams = Hash.new
  @mutex = Mutex.new
  @global = Array.new
end

Instance Method Details

#append_to_stream(events, stream, expected_version) ⇒ Object



13
14
15
# File 'lib/ruby_event_store/in_memory_repository.rb', line 13

def append_to_stream(events, stream, expected_version)
  add_to_stream(events, expected_version, stream, true)
end

#count(spec) ⇒ Object



48
49
50
# File 'lib/ruby_event_store/in_memory_repository.rb', line 48

def count(spec)
  read_scope(spec).count
end

#delete_stream(stream) ⇒ Object



22
23
24
# File 'lib/ruby_event_store/in_memory_repository.rb', line 22

def delete_stream(stream)
  streams.delete(stream.name)
end

#has_event?(event_id) ⇒ Boolean

Returns:

  • (Boolean)


26
27
28
# File 'lib/ruby_event_store/in_memory_repository.rb', line 26

def has_event?(event_id)
   global.any?{ |item| item.event_id.eql?(event_id) }
end

#last_stream_event(stream) ⇒ Object



30
31
32
# File 'lib/ruby_event_store/in_memory_repository.rb', line 30

def last_stream_event(stream)
  stream_of(stream.name).last
end


17
18
19
20
# File 'lib/ruby_event_store/in_memory_repository.rb', line 17

def link_to_stream(event_ids, stream, expected_version)
  events = normalize_to_array(event_ids).map {|eid| read_event(eid)}
  add_to_stream(events, expected_version, stream, nil)
end

#read(spec) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/ruby_event_store/in_memory_repository.rb', line 34

def read(spec)
  events = read_scope(spec)
  if spec.batched?
    batch_reader = ->(offset, limit) { events.drop(offset).take(limit) }
    BatchEnumerator.new(spec.batch_size, events.size, batch_reader).each
  elsif spec.first?
    events.first
  elsif spec.last?
    events.last
  else
    events.each
  end
end

#streams_of(event_id) ⇒ Object



63
64
65
66
67
# File 'lib/ruby_event_store/in_memory_repository.rb', line 63

def streams_of(event_id)
  streams.select do |_, stream_events|
    stream_events.any? { |event| event.event_id.eql?(event_id) }
  end.map { |name, _| Stream.new(name) }
end

#update_messages(messages) ⇒ Object



52
53
54
55
56
57
58
59
60
61
# File 'lib/ruby_event_store/in_memory_repository.rb', line 52

def update_messages(messages)
  messages.each do |new_msg|
    location = global.index{|m| new_msg.event_id.eql?(m.event_id)} or raise EventNotFound.new(new_msg.event_id)
    global[location] = new_msg
    streams.values.each do |str|
      location = str.index{|m| new_msg.event_id.eql?(m.event_id)}
      str[location] = new_msg if location
    end
  end
end