Acme-MomoiroClover
view release on metacpan or search on metacpan
lib/Acme/MomoiroClover.pm view on Meta::CPAN
package Acme::MomoiroClover;
use strict;
use warnings;
use Carp qw(croak);
use Date::Simple ();
use Acme::MomoiroClover::Z;
our $VERSION = '0.2';
my @members = qw(
AriyasuMomoka
FujishiroSumire
HayamiAkari
IkuraManami
KashiwaYukina
MomotaKanako
SasakiAyaka
TakagiReni
TakaiTsukina
TamaiShiori
WagawaMiyuu
);
sub new {
my $class = shift;
my $self = bless {members => []}, $class;
$self->_check();
$self->_initialize;
return $self;
}
sub _check {
my $self = shift;
Date::Simple::today() <= Acme::MomoiroClover::Z::change_date() or croak('MomoiroClover is obsolete. Please use Acme::MomoiroClover::Z ');
}
sub members {
my ($self, $type, @members) = @_;
@members = @{$self->{members}} unless @members;
return @members unless $type;
if ($type eq 'active') {
return grep {!$_->graduate_date} @members;
}
elsif ($type eq 'graduate') {
return grep {$_->graduate_date} @members;
}
elsif ($type->isa('Date::Simple')) {
return grep {
$_->join_date <= $type and
(!$_->graduate_date or $type <= $_->graduate_date)
} @members;
}
}
sub sort {
my ($self, $type, $order, @members) = @_;
@members = $self->members unless @members;
# order by desc if $order is true
if ($order) {
return sort {$b->$type <=> $a->$type} @members;
}
else {
return sort {$a->$type <=> $b->$type} @members;
}
}
sub select {
my ($self, $type, $number, $operator, @members) = @_;
$self->_die('invalid operator was passed in')
unless grep {$operator eq $_} qw(== >= <= > <);
@members = $self->members unless @members;
my $compare = eval "(sub { \$number $operator \$_[0] })";
return grep { $compare->($_->$type) } @members;
}
sub _initialize {
my $self = shift;
for my $member (@members) {
my $module_name = 'Acme::MomoiroClover::Members::'.$member;
eval qq|require $module_name;|;
push @{$self->{members}}, $module_name->new;
}
return 1;
}
( run in 2.563 seconds using v1.01-cache-2.11-cpan-0fb53d1c279 )