EventStore::Tiny 
A minimal event sourcing framework.
Example
Prepare event types and their predefined state actions (by side-effect):
use EventStore::Tiny;
my $store = EventStore::Tiny->new;
$store->register_event(UserAdded => sub {
my ($state, $data) = @_;
# Use $data to inject the new user into the given $state
$state->{users}{$data->{id}} = {
name => $data->{name},
};
});
Push an event to the event store. A high-resolution timestamp and an UUID will be generated automatically. Events execute their state actions on data they get here:
$store->store_event(UserAdded => {id => 17, name => 'Bob'});
State is generated by replaying the stored events:
say 'His name is ' . $store->snapshot->state->{users}{17}{name}; # Bob
See Tamagotchi.pm and tamagotchi.t for a non-trivial demo.
Features
- Flexible snapshots (high-resolution timestamps) and event substreams
- Customizable event logging
- Simple storage solution for events in the file system
- Transparent snapshot caching mechanism to improve performance
Author and license
Copyright (c) 2018 Mirko Westermeier (mail: mirko@westermeier.de)
Details: LICENSE.txt