Acme-MorningMusume
view release on metacpan or search on metacpan
lib/Acme/MorningMusume.pm view on Meta::CPAN
IchiiSayaka
YaguchiMari
YasudaKei
GotohMaki
IshikawaRika
YoshizawaHitomi
TsujiNozomi
KagoAi
TakahashiAi
KonnoAsami
OgawaMakoto
NiigakiRisa
KameiEri
TanakaReina
MichishigeSayumi
FujimotoMiki
KusumiKoharu
MitsuiAika
LiChun
QianLin
SuzukiKanon
IkutaErina
FukumuraMizuki
SayashiRiho
IikuboHaruna
IshidaAyumi
SatohMasaki
KudohHaruka
OdaSakura
OgataHaruna
NonakaMiki
MakinoMaria
HagaAkane
);
my @date_joined = map {
my ($year, $month, $day) = ($_ =~ /(\d{4})-(\d{2})-(\d{2})/);
DateTime->new(
year => $year,
month => $month,
day => $day,
);
} qw(
1997-09-07
1998-05-03
1999-08-04
2000-04-16
2001-08-26
2003-01-19
2005-05-01
2006-12-10
2011-01-02
2011-09-29
2012-09-14
2014-09-30
);
unshift @date_joined, undef;
sub new {
my $class = shift;
my $self = bless {members => []}, $class;
$self->_initialize;
return $self;
}
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('DateTime')) {
return grep {
$date_joined[$_->class] <= $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::MorningMusume::'.$member;
eval qq|require $module_name;|;
push @{$self->{members}}, $module_name->new;
}
( run in 1.187 second using v1.01-cache-2.11-cpan-6aa56a78535 )