Acme-Nogizaka46

 view release on metacpan or  search on metacpan

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

    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);

    @members = $self->members unless @members;
    if ($type eq 'center') {
    } else {
        my $compare = eval "(sub { \$num_or_str $operator \$_[0] })";

        return grep { $compare->($_->$type) } @members;
    }
}

sub _initialize {
    my $self = shift;

    for my $member (@members) {
        my $module_name = 'Acme::Nogizaka46::'.$member;



( run in 2.293 seconds using v1.01-cache-2.11-cpan-364913b4093 )