Acme-MorningMusume
view release on metacpan or search on metacpan
lib/Acme/MorningMusume.pm view on Meta::CPAN
my ($self, $type, $number, $operator, @members) = @_;
$self->_die('invalid operator was passed in')
unless grep {$operator eq $_} qw(== >= <= > <);
@members = $self->members unless @members;
my $compare = eval "(sub { \$number $operator \$_[0] })";
return grep { $compare->($_->$type) } @members;
}
sub _initialize {
my $self = shift;
for my $member (@members) {
my $module_name = 'Acme::MorningMusume::'.$member;
eval qq|require $module_name;|;
push @{$self->{members}}, $module_name->new;
}
return 1;
}
sub _die {
my ($self, $message) = @_;
Carp::croak($message);
}
1;
__END__
=head1 NAME
Acme::MorningMusume - All about Japanese pop star "Morning Musume"
=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.
It consists of many pretty girls and has been known as a group which
members change one after another so frequently that people can't
completely tell who is who in the group.
This module, Acme::MorningMusume, provides an easy method to catch up
with Morning Musume.
=head1 METHODS
=head2 new
=over 4
my $musume = Acme::MorningMusume->new;
Creates and returns a new Acme::MorningMusume object.
=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
=head2 sort ( $type, $order [ , @members ] )
=over 4
# $type can be one of the values below:
# + age : sort by age
# + class : sort by class
#
# $order can be a one of the values below:
# + something true value : sort in descending order
# + something false value : sort in ascending order
my @sorted_members = $musume->sort('age', 1); # sort by age in descending order
Returns the members sorted by the I<$type> field.
=back
=head2 select ( $type, $number, $operator [, @members] )
=over 4
# $type can be one of the same values above:
my @selected_members = $musume->select('age', 18, '>=');
( run in 1.353 second using v1.01-cache-2.11-cpan-99c4e6809bf )