Acme-MorningMusume

 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"
         }
      }
   },
   "provides" : {
      "Acme::MorningMusume" : {
         "file" : "lib/Acme/MorningMusume.pm",
         "version" : "0.20"
      },
      "Acme::MorningMusume::AbeNatsumi" : {
         "file" : "lib/Acme/MorningMusume/AbeNatsumi.pm",

META.yml  view on Meta::CPAN

    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>'

README.md  view on Meta::CPAN

# 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.

README.md  view on Meta::CPAN


>     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 \] )

cpanfile  view on Meta::CPAN

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()';
}



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