NAME

Zing::Domain - Aggregate Root

ABSTRACT

Aggregate Root Construct

SYNOPSIS

use Zing::Domain;

my $domain = Zing::Domain->new(name => 'user-1');

# $domain->recv;

DESCRIPTION

This package provides an aggregate abstraction and real-time cross-process sharable data structure which offers many benefits, not least being able to see a full history of state changes.

LIBRARIES

This package uses type constraints from:

Zing::Types

ATTRIBUTES

This package has the following attributes:

channel

channel(Channel)

This attribute is read-only, accepts (Channel) values, and is optional.

name

name(Str)

This attribute is read-only, accepts (Str) values, and is required.

threshold

threshold(Str)

This attribute is read-only, accepts (Str) values, and is optional.

METHODS

This package implements the following methods:

apply

apply() : Object

The apply method receives events from the channel and applies the operations.

apply example #1
# given: synopsis

$domain->apply;

change

change(Str $op, Str $key, Any @val) : Object

The change method commits an operation (and snapshot) to the channel. This method is used internally and shouldn't need to be called directly.

change example #1
# given: synopsis

$domain->change('incr', 'karma');

data

data() : HashRef

The data method returns the raw aggregate data associated with the object.

data example #1
# given: synopsis

$domain->data;

decr

decr(Str $key, Int $val = 1) : Object

The decr method decrements the data associated with a specific key.

decr example #1
# given: synopsis

$domain->decr('karma');
decr example #2
# given: synopsis

$domain->decr('karma', 2);

del

del(Str $key) : Object

The del method deletes the data associated with a specific key.

del example #1
# given: synopsis

$domain->del('missing');
del example #2
# given: synopsis

$domain->set('email', 'me@example.com');

$domain->del('email');

get

get(Str $key) : Any

The get method return the data associated with a specific key.

get example #1
# given: synopsis

$domain->get('email');
get example #2
# given: synopsis

$domain->set('email', 'me@example.com');

$domain->get('email');

incr

incr(Str $key, Int $val = 1) : Object

The incr method increments the data associated with a specific key.

incr example #1
# given: synopsis

$domain->incr('karma');
incr example #2
# given: synopsis

$domain->incr('karma', 5);

pop

pop(Str $key) : Object

The pop method pops the data off of the stack associated with a specific key.

pop example #1
# given: synopsis

$domain->pop('history');

push

push(Str $key, Any @val) : Object

The push method pushes data onto the stack associated with a specific key.

push example #1
# given: synopsis

$domain->push('history', { updated => 1234567890 });

set

set(Str $key, Any $val) : Object

The set method commits the data associated with a specific key to the channel.

set example #1
# given: synopsis

$domain->set('updated', 1234567890);

shift

shift(Str $key) : Object

The shift method shifts data off of the stack associated with a specific key.

shift example #1
# given: synopsis

$domain->shift('history');

unshift

unshift(Str $key, Any @val) : Object

The unshift method unshifts data onto the stack associated with a specific key.

unshift example #1
# given: synopsis

$domain->unshift('history', { updated => 1234567890 });

AUTHOR

Al Newkirk, awncorp@cpan.org

LICENSE

Copyright (C) 2011-2019, Al Newkirk, et al.

This is free software; you can redistribute it and/or modify it under the terms of the The Apache License, Version 2.0, as elucidated in the "license file".

PROJECT

Wiki

Project

Initiatives

Milestones

Contributing

Issues