EventStore::Tiny Build Status

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

Author and license

Copyright (c) 2018 Mirko Westermeier (mail: mirko@westermeier.de)

Details: LICENSE.txt