Schedule-Activity
view release on metacpan or search on metacpan
lib/Schedule/Activity/Message.pm view on Meta::CPAN
package Schedule::Activity::Message;
use strict;
use warnings;
use Ref::Util qw/is_arrayref is_hashref is_ref/;
our $VERSION='0.3.0';
my %property=map {$_=>undef} qw/message attributes names note/;
sub new {
my ($ref,%opt)=@_;
my $class=is_ref($ref)||$ref;
my %self=(
attributes=>$opt{attributes}//{},
msg =>[],
names =>$opt{names}//{},
);
if(is_hashref($opt{message})) {
if(is_arrayref($opt{message}{alternates})) {
@{$self{msg}}=grep
{is_hashref($_) && (
(!is_ref($$_{message}) && defined($$_{message}))
|| (!is_ref($$_{name}) && defined($$_{name}))
)} @{$opt{message}{alternates}}
}
elsif(defined($opt{message}{name})&&!is_ref($opt{message}{name})) { @{$self{msg}}=({name=>$opt{message}{name}}) }
}
elsif(is_arrayref($opt{message})) { @{$self{msg}}=grep {!is_ref($_) && defined($_)} @{$opt{message}} }
elsif(!is_ref($opt{message})) { @{$self{msg}}=grep {!is_ref($_) && defined($_)} $opt{message} }
return bless(\%self,$class);
}
sub unwrap {
my ($self,$msg)=@_;
if(!defined($msg)) { return ('',$self) }
my $names=$$self{names};
if(!is_ref($msg)) {
if(!defined($$names{$msg})) { return ($msg,$self) }
return __PACKAGE__->new(%{$$names{$msg}},names=>{})->random();
}
if(is_hashref($msg)) {
my $name=$$msg{name}//$$msg{message};
if(!defined($$names{$name})) { return ($$msg{message},$msg) }
return __PACKAGE__->new(%{$$names{$name}},names=>{})->random();
}
return ('',$msg);
}
sub primary { my ($self)=@_; return $self->unwrap($$self{msg}[0]) }
sub random { my ($self)=@_; return $self->unwrap($$self{msg}[ int(rand(1+$#{$$self{msg}})) ]) }
sub attributesFromConf {
my ($conf)=@_;
if(!is_hashref($conf)) { return }
my @res;
if(is_hashref($$conf{attributes})) {
while(my ($k,$v)=each %{$$conf{attributes}}) { push @res,[$k,$v] } }
if(is_arrayref($$conf{alternates})) {
foreach my $message (grep {is_hashref($_)} @{$$conf{alternates}}) {
if(is_hashref($$message{attributes})) {
while(my ($k,$v)=each %{$$message{attributes}}) { push @res,[$k,$v] } } } }
return @res;
}
( run in 0.577 second using v1.01-cache-2.11-cpan-39bf76dae61 )