Acme-Nogizaka46

 view release on metacpan or  search on metacpan

lib/Acme/Nogizaka46.pm  view on Meta::CPAN


use Carp  qw(croak);
use DateTime;

our $VERSION = '0.3';

my @members = qw(
    AkimotoManatsu
    AndoMikumo
    IkutaErika
    IkomaRina
    IchikiRena
    ItoNene
    ItoMarika
    InoueSayuri
    IwaseYumiko
    EtoMisa
    KashiwaYukina
    KawagoHina
    KawamuraMahiro
    SaitoAsuka
    SaitoChiharu
    SaitoYuri
    SakuraiReika
    ShiraishiMai
    TakayamaKazumi
    NakadaKana
    NakamotoHimeka
    NagashimaSeira
    NishinoNanase
    NojoAmi
    HashimotoNanami
    HatanakaSeira
    HiguchiHina
    FukagawaMai
    HoshinoMinami
    MatsumuraSayuri
    MiyazawaSeira
    YamatoRina
    YamamotoHonoka
    YoshimotoAyaka
    WakatsukiYumi
    WadaMaaya
    ItoKarin
    ItoJunna
    KitanoHinako
    SagaraIori
    SasakiKotoko
    ShinuchiMai
    SuzukiAyane
    TeradaRanze
    NishikawaNanami
    HoriMiona
    YadaRisako
    YamazakiRena
    YonetokuKyoka
    WatanabeMiria
    MatsuiRena
);

my %date_joined = map {
    my ($class, $year, $month, $day) = ($_ =~ /(\w+):(\d{4})-(\d{2})-(\d{2})/);
    $class => DateTime->new(
        year  => $year,
        month => $month,
        day   => $day,
    );
} qw(
    1:2011-08-21
    2:2013-05-11
    MatsuiRena:2014-02-24
);

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, $num_or_str, $operator, @members) = @_;

    $self->_die('invalid operator was passed in')
        unless grep {$operator eq $_} qw(== >= <= > < eq ne);



( run in 1.007 second using v1.01-cache-2.11-cpan-302cb4679cc )