Acme-Nogizaka46

 view release on metacpan or  search on metacpan

META.json  view on Meta::CPAN

            "Test::CPAN::Meta" : "0",
            "Test::MinimumVersion::Fast" : "0.04",
            "Test::PAUSE::Permissions" : "0.04",
            "Test::Pod" : "1.41",
            "Test::Spellunker" : "v0.2.7"
         }
      },
      "runtime" : {
         "requires" : {
            "Class::Accessor" : "0",
            "DateTime" : "0",
            "perl" : "5.008001"
         }
      },
      "test" : {
         "requires" : {
            "Test::More" : "0.98"
         }
      }
   },
   "provides" : {

META.yml  view on Meta::CPAN

    file: lib/Acme/Nogizaka46/YamazakiRena.pm
    version: '0.3'
  Acme::Nogizaka46::YonetokuKyoka:
    file: lib/Acme/Nogizaka46/YonetokuKyoka.pm
    version: '0.3'
  Acme::Nogizaka46::YoshimotoAyaka:
    file: lib/Acme/Nogizaka46/YoshimotoAyaka.pm
    version: '0.3'
requires:
  Class::Accessor: '0'
  DateTime: '0'
  perl: '5.008001'
resources:
  bugtracker: https://github.com/2GMon/perl-acme-nogizaka46/issues
  homepage: https://github.com/2GMon/perl-acme-nogizaka46
  repository: git://github.com/2GMon/perl-acme-nogizaka46.git
version: '0.3'
x_contributors:
  - '2GMon <2gmon.t@gmail.com>'
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'

README.md  view on Meta::CPAN

# SYNOPSIS

    use Acme::Nogizaka46;

    my $nogizaka = Acme::Nogizaka46->new;

    # retrieve the members on their activities
    my @members              = $nogizaka->members;             # retrieve all
    my @active_members       = $nogizaka->members('active');
    my @graduate_members     = $nogizaka->members('graduate');
    my @at_some_time_members = $nogizaka->members(DateTime->now->subtract(years => 5));

    # retrieve the members under some conditions
    my @sorted_by_age        = $nogizaka->sort('age', 1);
    my @sorted_by_class      = $nogizaka->sort('class', 1);
    my @selected_by_age      = $nogizaka->select('age', 18, '>=');
    my @selected_by_class    = $nogizaka->select('class', 5, '==');

# DESCRIPTION

"Nogizaka46" is a Japanese female idol group.

README.md  view on Meta::CPAN


>     my $nogizaka = Acme::Nogizaka46->new;
>
> Creates and returns a new Acme::Nogizaka46 object.

## members ( $type )

>     # $type can be one of the values below:
>     #  + active              : active members
>     #  + graduate            : graduate members
>     #  + DateTime object     : members at the time passed in
>     #  + undef               : all members
>
>     my @members = $nogizaka->members('active');
>
> Returns the members as a list of the [Acme::Nogizaka46::Base](https://metacpan.org/pod/Acme::Nogizaka46::Base)
> based object represents each member. See also the documentation of
> [Acme::Nogizaka46::Base](https://metacpan.org/pod/Acme::Nogizaka46::Base) for more details.

## sort ( $type, $order \[ , @members \] )

cpanfile  view on Meta::CPAN

requires 'perl', '5.008001';
requires 'Class::Accessor';
requires 'DateTime';

on 'test' => sub {
    requires 'Test::More', '0.98';
};

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

package Acme::Nogizaka46;

use strict;
use warnings;

use Carp  qw(croak);
use DateTime;

our $VERSION = '0.3';

my @members = qw(
    AkimotoManatsu
    AndoMikumo
    IkutaErika
    IkomaRina
    IchikiRena
    ItoNene

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

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

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

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

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

=head1 SYNOPSIS

  use Acme::Nogizaka46;

  my $nogizaka = Acme::Nogizaka46->new;

  # retrieve the members on their activities
  my @members              = $nogizaka->members;             # retrieve all
  my @active_members       = $nogizaka->members('active');
  my @graduate_members     = $nogizaka->members('graduate');
  my @at_some_time_members = $nogizaka->members(DateTime->now->subtract(years => 5));

  # retrieve the members under some conditions
  my @sorted_by_age        = $nogizaka->sort('age', 1);
  my @sorted_by_class      = $nogizaka->sort('class', 1);
  my @selected_by_age      = $nogizaka->select('age', 18, '>=');
  my @selected_by_class    = $nogizaka->select('class', 5, '==');

=head1 DESCRIPTION

"Nogizaka46" is a Japanese female idol group.

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


=back

=head2 members ( $type )

=over 4

  # $type can be one of the values below:
  #  + active              : active members
  #  + graduate            : graduate members
  #  + DateTime object     : members at the time passed in
  #  + undef               : all members

  my @members = $nogizaka->members('active');

Returns the members as a list of the L<Acme::Nogizaka46::Base>
based object represents each member. See also the documentation of
L<Acme::Nogizaka46::Base> for more details.

=back

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

package Acme::Nogizaka46::Base;

use strict;
use warnings;
use DateTime;
use base qw(Class::Accessor);

our $VERSION = 0.3;

__PACKAGE__->mk_accessors(qw(
    name_ja
    first_name_ja
    family_name_ja
    name_en
    first_name_en

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

    $self->{$_}      = $info{$_} for keys %info;
    $self->{name_ja} = $self->family_name_ja.$self->first_name_ja;
    $self->{name_en} = $self->first_name_en.' '.$self->family_name_en;
    $self->{age}     = $self->_calculate_age;

    return 1;
}

sub _calculate_age {
    my $self  = shift;
    my $today = DateTime->today;

    if (($today->month - $self->birthday->month) > 0) {
        return $today->year - $self->birthday->year;
    } elsif (($today->month - $self->birthday->month) == 0) {
        if (($today->day - $self->birthday->day  ) >= 0) {
            return $today->year - $self->birthday->year;
        } else {
            return ($today->year - $self->birthday->year) - 1;
        }
    } else {
        return ($today->year - $self->birthday->year) - 1;
    }
}

sub _datetime_from_date {
    my ($self, $date) = @_;
    my ($year, $month, $day) = ($date =~ /(\d{4})-(\d{2})-(\d{2})/);

    DateTime->new(
        year  => $year,
        month => $month,
        day   => $day,
    );
}

1;

__END__

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

  my @members = $nogizaka->members;

  for my $member (@members) {
      my $name_ja        = $member->name_ja;
      my $first_name_ja  = $member->first_name_ja;
      my $family_name_ja = $member->family_name_ja;
      my $name_en        = $member->name_en;
      my $first_name_en  = $member->first_name_en;
      my $family_name_en = $member->family_name_en;
      my $nick           = $member->nick;           # arrayref
      my $birthday       = $member->birthday;       # DateTime object
      my $age            = $member->age;
      my $blood_type     = $member->blood_type;
      my $hometown       = $member->hometown;
      my $emoticon       = $member->emoticon;       # arrayref
      my $class          = $member->class;
      my $graduate_date  = $member->graduate_date;  # DateTime object
  }

=head1 DESCRIPTION

Acme::Nogizaka46::Base is a baseclass of the class represents each
member of Nogizaka46.

=head1 ACCESSORS

=head2 name_ja

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

=head2 emoticon

=head2 class

=head2 graduate_date

=head1 SEE ALSO

=over 4

=item * L<DateTime>

=back

=head1 AUTHOR

Kentaro Kuribayashi E<lt>kentaro@cpan.orgE<gt>

=head1 COPYRIGHT AND LICENSE (The MIT License)

Copyright (c) 2015, Takaaki TSUJIMOTO E<lt>2gmon.t@gmail.comE<gt>

t/01_members.t  view on Meta::CPAN

use strict;
use DateTime;
use Acme::Nogizaka46;
use Test::More tests => 7;

my $nogizaka  = Acme::Nogizaka46->new;

is scalar($nogizaka->members),             51, " members(undef) retrieved all";
is scalar($nogizaka->members('active')),   35, " members('active')";
is scalar($nogizaka->members('graduate')), 16, " members('graduate')";
is scalar($nogizaka->members(DateTime->new(year => 2011, month => 8, day => 20))), 0, " members('date_simple_object')";
is scalar($nogizaka->members(DateTime->new(year => 2011, month => 8, day => 21))), 36, " members('date_simple_object')";
is scalar($nogizaka->members(DateTime->new(year => 2014, month => 8, day => 21))), 43, " members('date_simple_object')";
is scalar($nogizaka->members(DateTime->new(year => 2016, month => 3, day => 23))), 36, " members('date_simple_object')";

t/02_nogizaka.t  view on Meta::CPAN


for my $member (@members) {
    ok $member,                           $member->name_en;
    ok $member->name_ja,                  '  name_ja()';
    ok $member->first_name_ja,            '  first_name_ja()';
    ok $member->family_name_ja,           '  family_name_ja()';
    ok $member->name_en,                  '  name_en()';
    ok $member->first_name_en,            '  first_name_en()';
    ok $member->family_name_en,           '  family_name_en()';
    ok ref($member->nick) eq 'ARRAY',     '  nick()';
    ok !$member->birthday || $member->birthday->isa('DateTime'), '  birthday()';
    ok $member->age,                      '  age()';
    ok $member->blood_type,               '  blood_type()';
    ok $member->hometown,                 '  hometown()';
    ok $member->class,                    '  class()';
    ok !$member->center || scalar($member->center) > 0, "  center()";
    ok !$member->graduate_date || $member->graduate_date->isa('DateTime'), '  graduate_date()';
}

t/03_select.t  view on Meta::CPAN

use strict;
use DateTime;
use Acme::Nogizaka46;
use Test::More tests => 1;

my $nogizaka  = Acme::Nogizaka46->new;

my @maimai = $nogizaka->select('family_name_en', 'Fukagawa', 'eq');
is @maimai[0]->name_en, 'Mai Fukagawa', "select('first_name_en')";

diag( $nogizaka->select('center', undef, 'ne'));



( run in 0.384 second using v1.01-cache-2.11-cpan-05444aca049 )