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 )