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"
}
}
},
"provides" : {
"Acme::MorningMusume" : {
"file" : "lib/Acme/MorningMusume.pm",
"version" : "0.20"
},
"Acme::MorningMusume::AbeNatsumi" : {
"file" : "lib/Acme/MorningMusume/AbeNatsumi.pm",
file: lib/Acme/MorningMusume/YaguchiMari.pm
version: '0.20'
Acme::MorningMusume::YasudaKei:
file: lib/Acme/MorningMusume/YasudaKei.pm
version: '0.20'
Acme::MorningMusume::YoshizawaHitomi:
file: lib/Acme/MorningMusume/YoshizawaHitomi.pm
version: '0.20'
requires:
Class::Accessor: '0'
DateTime: '0'
resources:
bugtracker: https://github.com/kentaro/perl-acme-morningmusume/issues
homepage: https://github.com/kentaro/perl-acme-morningmusume
repository: git://github.com/kentaro/perl-acme-morningmusume.git
version: '0.20'
x_contributors:
- 'Kentaro Kuribayashi <kentarok@gmail.com>'
- 'kazusuke sasezaki <sasezaki+github@gmail.com>'
- 'catatsuy <catatsuy@catatsuy.org>'
# SYNOPSIS
use Acme::MorningMusume;
my $musume = Acme::MorningMusume->new;
# retrieve the members on their activities
my @members = $musume->members; # retrieve all
my @active_members = $musume->members('active');
my @graduate_members = $musume->members('graduate');
my @at_some_time_members = $musume->members(DateTime->now->subtract(years => 5));
# retrieve the members under some conditions
my @sorted_by_age = $musume->sort('age', 1);
my @sorted_by_class = $musume->sort('class', 1);
my @selected_by_age = $musume->select('age', 18, '>=');
my @selected_by_class = $musume->select('class', 5, '==');
# DESCRIPTION
"Morning Musume" is one of highly famous Japanese pop stars.
> my $musume = Acme::MorningMusume->new;
>
> Creates and returns a new Acme::MorningMusume 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 = $musume->members('active');
>
> Returns the members as a list of the [Acme::MorningMusume::Base](https://metacpan.org/pod/Acme::MorningMusume::Base)
> based object represents each member. See also the documentation of
> [Acme::MorningMusume::Base](https://metacpan.org/pod/Acme::MorningMusume::Base) for more details.
## sort ( $type, $order \[ , @members \] )
requires 'Class::Accessor';
requires 'DateTime';
on build => sub {
requires 'ExtUtils::MakeMaker', '6.36';
};
lib/Acme/MorningMusume.pm view on Meta::CPAN
package Acme::MorningMusume;
use strict;
use warnings;
use Carp qw(croak);
use DateTime;
our $VERSION = '0.20';
my @members = qw(
FukudaAsuka
NakazawaYuko
IidaKaori
AbeNatsumi
IshiguroAya
IchiiSayaka
lib/Acme/MorningMusume.pm view on Meta::CPAN
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
lib/Acme/MorningMusume.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/MorningMusume.pm view on Meta::CPAN
=head1 SYNOPSIS
use Acme::MorningMusume;
my $musume = Acme::MorningMusume->new;
# retrieve the members on their activities
my @members = $musume->members; # retrieve all
my @active_members = $musume->members('active');
my @graduate_members = $musume->members('graduate');
my @at_some_time_members = $musume->members(DateTime->now->subtract(years => 5));
# retrieve the members under some conditions
my @sorted_by_age = $musume->sort('age', 1);
my @sorted_by_class = $musume->sort('class', 1);
my @selected_by_age = $musume->select('age', 18, '>=');
my @selected_by_class = $musume->select('class', 5, '==');
=head1 DESCRIPTION
"Morning Musume" is one of highly famous Japanese pop stars.
lib/Acme/MorningMusume.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 = $musume->members('active');
Returns the members as a list of the L<Acme::MorningMusume::Base>
based object represents each member. See also the documentation of
L<Acme::MorningMusume::Base> for more details.
=back
lib/Acme/MorningMusume/Base.pm view on Meta::CPAN
package Acme::MorningMusume::Base;
use strict;
use warnings;
use DateTime;
use base qw(Class::Accessor);
our $VERSION = '0.20';
__PACKAGE__->mk_accessors(qw(
name_ja
first_name_ja
family_name_ja
name_en
first_name_en
lib/Acme/MorningMusume/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) {
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/MorningMusume/Base.pm view on Meta::CPAN
my @members = $musume->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::MorningMusume::Base is a baseclass of the class represents each
member of Morning Musume.
=head1 ACCESSORS
=head2 name_ja
lib/Acme/MorningMusume/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) 2005 - 2007, Kentaro Kuribayashi
t/01_members.t view on Meta::CPAN
use strict;
use DateTime;
use Acme::MorningMusume;
use Test::More tests => 4;
my $musume = Acme::MorningMusume->new;
is scalar($musume->members), 38, " members(undef) retrieved all";
is scalar($musume->members('active')), 11, " members('active')";
is scalar($musume->members('graduate')), 27, " members('graduate')";
is scalar($musume->members(DateTime->new(year => 2001, month => 1, day => 1))), 10, " members('date_simple_object')";
t/02_musume.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, ' 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 ref($member->emoticon) eq 'ARRAY', ' emoticon()';
ok $member->class, ' class()';
ok !$member->graduate_date || $member->graduate_date->isa('DateTime'), ' birthday()';
}