Schedule-Activity
view release on metacpan or search on metacpan
lib/Schedule/Activity.pm view on Meta::CPAN
package Schedule::Activity;
use strict;
use warnings;
use List::Util qw/any/;
use Ref::Util qw/is_arrayref is_hashref is_plain_hashref is_ref/;
use Scalar::Util qw/blessed/;
use Schedule::Activity::Annotation;
use Schedule::Activity::Attributes;
use Schedule::Activity::Message;
use Schedule::Activity::Node;
use Schedule::Activity::NodeFilter;
our $VERSION='0.3.0';
sub new {
my ($ref,%opt)=@_;
my $class=is_ref($ref)||$ref;
my %self=(
config =>$opt{configuration}//{},
attr =>undef,
valid =>0,
built =>undef,
reach =>undef,
unsafe =>$opt{unsafe}//0,
PNA =>undef, # per node attribute prefix, loaded via config
);
return bless(\%self,$class);
}
# validate()
# compile()
# schedule(activities=>[...])
sub _attr {
my ($self)=@_;
$$self{attr}//=Schedule::Activity::Attributes->new();
return $$self{attr};
}
sub validate {
my ($self,$force)=@_;
if($$self{valid}&&!$force) { return }
$$self{config}//={}; if(!is_hashref($$self{config})) { return ('Configuration must be a hash') }
my @errors=$self->_validateConfig();
if(!@errors) { $$self{valid}=1 }
return @errors;
}
sub _validateConfig {
my ($self)=@_;
my $attr=$self->_attr();
my %config=%{$$self{config}};
my (@errors,@invalids);
if(!is_hashref($config{node})) { push @errors,'Config is missing: node'; $config{node}={} }
if($config{attributes}) {
if(!is_hashref($config{attributes})) { push @errors,'Attributes invalid structure' }
else { while(my ($k,$v)=each %{$config{attributes}}) { push @errors,$attr->register($k,%$v) } }
}
if($config{messages}) {
if(!is_hashref($config{messages})) { push @errors,'Messages invalid structure' }
else {
while(my ($namea,$msga)=each %{$config{messages}}) {
if(!is_hashref($msga)) { push @errors,"Messages $namea invalid structure"; next }
elsif(defined($$msga{attributes})&&!is_hashref($$msga{attributes})) { push @errors,"Messages $namea invalid attributes"; delete($$msga{attributes}) }
else { foreach my $kv (Schedule::Activity::Message::attributesFromConf($msga)) { push @errors,$attr->register($$kv[0],%{$$kv[1]}) } }
( run in 2.513 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )