Schedule-Activity
view release on metacpan or search on metacpan
lib/Schedule/Activity/Attributes.pm view on Meta::CPAN
package Schedule::Activity::Attributes;
use strict;
use warnings;
use Ref::Util qw/is_ref/;
use Schedule::Activity::Attribute;
our $VERSION='0.3.0';
sub new {
my ($ref,%opt)=@_;
my $class=is_ref($ref)||$ref;
my %self=(
attr =>{},
stack=>[],
);
return bless(\%self,$class);
}
sub register {
my ($self,$attribute,%opt)=@_;
my @errors;
if(defined($$self{attr}{$attribute})) {
if($opt{type}&&($$self{attr}{$attribute}{type} ne $opt{type})) {
push @errors,"Attribute conflicting types: $attribute" }
return @errors;
}
eval {
$$self{attr}{$attribute}=Schedule::Activity::Attribute->new(%opt);
push @errors,$$self{attr}{$attribute}->validateConfig(%opt);
};
if($@) { push @errors,$@ }
return @errors;
}
# sub get { my ($self,$attribute)=@_; ... } # not yet needed
sub log {
my ($self,$tm)=@_;
if(!defined($tm)) { return $self }
foreach my $A (values %{$$self{attr}}) { $A->change(tm=>$tm,_log=>1) }
return $self;
}
sub change {
my ($self,$attribute,%opt)=@_;
my $A=$$self{attr}{$attribute};
if(!$A) { return }
$A->change(%opt);
return $self;
}
sub report {
my ($self)=@_;
my %res;
while(my ($k,$v)=each %{$$self{attr}}) { %{$res{$k}}=$v->report() }
return %res;
}
sub reset {
my ($self)=@_;
foreach my $attr (values %{$$self{attr}}) { $attr->reset() }
return $self;
}
( run in 1.913 second using v1.01-cache-2.11-cpan-39bf76dae61 )