Class: RubyEventStore::InMemoryRepository
- Inherits:
-
Object
- Object
- RubyEventStore::InMemoryRepository
- Defined in:
- lib/ruby_event_store/in_memory_repository.rb
Instance Method Summary collapse
- #append_to_stream(events, stream, expected_version) ⇒ Object
- #count(spec) ⇒ Object
- #delete_stream(stream) ⇒ Object
- #has_event?(event_id) ⇒ Boolean
-
#initialize ⇒ InMemoryRepository
constructor
A new instance of InMemoryRepository.
- #last_stream_event(stream) ⇒ Object
- #link_to_stream(event_ids, stream, expected_version) ⇒ Object
- #read(spec) ⇒ Object
- #streams_of(event_id) ⇒ Object
- #update_messages(messages) ⇒ Object
Constructor Details
#initialize ⇒ InMemoryRepository
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
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 |
#link_to_stream(event_ids, stream, expected_version) ⇒ Object
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 () .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 |