NAME
Context::Set::Manager - A manager for your Context::Sets
SYNOPSIS
my $cm = Context::Set::Manager->new();
my $users = $cm->restrict('users');
$users->set_property('page.color' , 'blue');
my $user1 = $cm->restrict('users' , 1 );
## OR
$user1 = $users->restrict(1);
$user1->set_property('page.color' , 'pink');
$user1->get_property('page.color'); # pink.
$cm->restrict('users' , 2)->get_property('page.color'); # blue
## OR
$users->restrict(2)->get_property('page.color'); # blue
PERSISTENCE
Give your manager a Context::Set::Storage subclass at build time. So all managed context persist using this storage.
For example:
my $cm = Context::Set::Manager->new({ storage => an instance of Context::Set::Storage::DBIC });
...
CONCURRENCY
If your manager lives in a process and a stored value is changed by another process, you can set this to autoreload the managed contexts on access. Use the option autoreload for that (Note that it only makes sense with a Persistent storage (see PERSISTENCE):
my $cm = Context::Set::Manager->new({ storage => an instance of Context::Set::Storage::DBIC,
autoreload => 1 });
Note: Performance might be impacted. This will be solved in the future by implementing cachable storages.
manage
Adds the given Context::Set to this manager (in case it was built outside).
Note that if a context with an identical fullname is already there, it will return it. This is to ensure the unicity of contexts within the manager.
Usage:
$context = $cm->manage($context);
restrict
Builds a restriction of the universe or of the given context.
Usage:
my $users = $cm->restrict('users'); ## This restricts the UNIVERSE
my $user1 = $cm->restrict($users, 1); ## This restricts the users.
my $user1 = $cm->restrict('users' , 1); ## Same thing
my $user1 = $cm->restruct('UNIVERSE/users' , 1); ## Same thing.
unite
Returns the union of the given Context::Sets. You need to give at least two contexts.
Context::Sets can be given by name or by references.
Usage:
my $ctx = $this->unite('context1' , $context2);
my $ctx = $this->unite($context1, 'context2', $context3);
find
Finds one context by the given name (local or full). Returns undef if nothing is found.
If the name only match a local name and there's more that one Context::Set with this name, the latest one will be returned.
Usage:
if( my $context = $this->find('a_name') ){
$this->find('UNIVERSE/name1/name2');
if( $this->find($a_context) ){ ## Is this context in this manager