view release on metacpan or search on metacpan
"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" : {
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'
# 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.
> 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 \] )
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'));