NAME
Zing::Domain - Shared State Management
ABSTRACT
Shared State Management 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.
INHERITS
This package inherits behaviors from:
LIBRARIES
This package uses type constraints from:
ATTRIBUTES
This package has the following attributes:
metadata
metadata(HashRef)
This attribute is read-only, accepts (HashRef)
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.
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.
decr
decr(Str $key, Int $val = 1) : Object
The decr method decrements the data associated with a specific key.
del
del(Str $key) : Object
The del method deletes the data associated with a specific key.
emit
emit(Str $key, HashRef $data) : Object
The emit method executes any callbacks registered using the "listen" method associated with a specific key.
- emit example #2
-
# given: synopsis $domain->listen('email', sub { my ($self, $data) = @_; $self->{event} = $data; }); $domain->emit('email', { val => ['me@example.com'] });
get
get(Str $key) : Any
The get method return the data associated with a specific key.
ignore
ignore(Str $key, Maybe[CodeRef] $sub) : Any
The ignore method removes the callback specified by the "listen", or all callbacks associated with a specific key if no specific callback if provided.
- ignore example #2
-
# given: synopsis my $callback = sub { my ($self, $data) = @_; $self->{event} = $data; }; $domain->listen('email', $callback); $domain->ignore('email', $callback);
- ignore example #3
-
# given: synopsis my $callback_1 = sub { my ($self, $data) = @_; $self->{event} = [$data, 2]; }; $domain->listen('email', $callback_1); my $callback_2 = sub { my ($self, $data) = @_; $self->{event} = [$data, 1]; }; $domain->listen('email', $callback_2); $domain->ignore('email', $callback_1);
- ignore example #4
-
# given: synopsis my $callback_1 = sub { my ($self, $data) = @_; $self->{event} = [$data, 1]; }; $domain->listen('email', $callback_1); my $callback_2 = sub { my ($self, $data) = @_; $self->{event} = [$data, 2]; }; $domain->listen('email', $callback_2); $domain->ignore('email');
incr
incr(Str $key, Int $val = 1) : Object
The incr method increments the data associated with a specific key.
listen
listen(Str $key, CodeRef $sub) : Object
The listen method registers callbacks associated with a specific key which will be invoked by the "emit" method or whenever an event matching the key specified is received and applied.
- listen example #1
-
# given: synopsis $domain->ignore('email'); $domain->listen('email', sub { my ($self, $data) = @_; $self->{event} = $data; });
- listen example #2
-
# given: synopsis $domain->ignore('email'); my $callback = sub { my ($self, $data) = @_; $self->{event} = $data; }; $domain->listen('email', $callback); $domain->listen('email', $callback);
- listen example #3
-
# given: synopsis $domain->ignore('email'); my $callback_1 = sub { my ($self, $data) = @_; $self->{event} = [$data, 1]; }; $domain->listen('email', $callback_1); my $callback_2 = sub { my ($self, $data) = @_; $self->{event} = [$data, 2]; }; $domain->listen('email', $callback_2);
merge
merge(Str $key, HashRef $val) : Object
The merge method commits the data associated with a specific key to the channel as a partial to be merged into any existing data.
- merge example #1
-
# given: synopsis $domain->merge(data => { email => 'me@example.com', username => 'me' }); $domain->merge(data => { email => 'we@example.com' });
- merge example #2
-
# given: synopsis $domain->set(data => { username => 'we' }); $domain->merge(data => { email => 'me@example.com', username => 'me' }); $domain->merge(data => { email => 'we@example.com' });
- merge example #3
-
# given: synopsis $domain->set(data => { username => 'we', colors => ['white'] }); $domain->merge(data => { email => 'me@example.com', username => 'me' }); $domain->merge(data => { email => 'we@example.com' }); $domain->merge(data => { colors => ['white', 'green'], username => 'we' });
pop
pop(Str $key) : Object
The pop method pops the data off of the stack associated with a specific key.
push
push(Str $key, Any @val) : Object
The push method pushes data onto the stack associated with a specific key.
set
set(Str $key, Any $val) : Object
The set method commits the data associated with a specific key to the channel.
shift
shift(Str $key) : Object
The shift method shifts data off of the stack associated with a specific key.
state
state() : HashRef
The state method returns the raw aggregate data associated with the object.
unshift
unshift(Str $key, Any @val) : Object
The unshift method unshifts data onto the stack associated with a specific key.
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".