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 )