class RubyCqrs::Data::InMemoryEventStore
Public Class Methods
new()
click to toggle source
# File lib/ruby_cqrs/data/in_memory_event_store.rb, line 12 def initialize @aggregate_store = {} @event_store = {} @snapshot_store = {} end
Public Instance Methods
load_by(guid, command_context)
click to toggle source
# File lib/ruby_cqrs/data/in_memory_event_store.rb, line 21 def load_by guid, command_context key = guid.to_sym state = { :aggregate_id => guid, :aggregate_type => @aggregate_store[key][:type] } if @snapshot_store.has_key? key extract_snapshot_into key, state else state[:events] = @event_store[key][:events] end state end
save(changes, command_context)
click to toggle source
# File lib/ruby_cqrs/data/in_memory_event_store.rb, line 37 def save changes, command_context changes.each do |change| key = change[:aggregate_id].to_sym verify_state key, change end changes.each do |change| key = change[:aggregate_id].to_sym create_state key, change update_state key, change end nil end
Private Instance Methods
create_state(key, change)
click to toggle source
# File lib/ruby_cqrs/data/in_memory_event_store.rb, line 51 def create_state key, change unless @aggregate_store.has_key? key @aggregate_store[key] = { :type => change[:aggregate_type], :version => 0 } @event_store[key] = { :events => [] } end unless @snapshot_store.has_key? key or change[:snapshot].nil? @snapshot_store[key] = {} end end
extract_snapshot_into(key, state)
click to toggle source
# File lib/ruby_cqrs/data/in_memory_event_store.rb, line 67 def extract_snapshot_into key, state snapshot_version = @snapshot_store[key][:version] state[:events] = @event_store[key][:events]\ .select { |event_record| event_record[:version] > snapshot_version } state[:snapshot] = @snapshot_store[key] end
update_state(key, change)
click to toggle source
# File lib/ruby_cqrs/data/in_memory_event_store.rb, line 61 def update_state key, change @aggregate_store[key][:version] = change[:expecting_version] change[:events].each { |event| @event_store[key][:events] << event } @snapshot_store[key] = change[:snapshot] unless change[:snapshot].nil? end
verify_state(key, change)
click to toggle source
# File lib/ruby_cqrs/data/in_memory_event_store.rb, line 74 def verify_state key, change raise AggregateConcurrencyError.new("on aggregate #{key}")\ if @aggregate_store.has_key? key\ and @aggregate_store[key][:version] != change[:expecting_source_version] end