Skip to content

Commit

Permalink
Sample code for the introduction to Moose.
Browse files Browse the repository at this point in the history
  • Loading branch information
davorg committed Mar 7, 2015
1 parent 656477a commit 1bb5428
Show file tree
Hide file tree
Showing 7 changed files with 143 additions and 0 deletions.
50 changes: 50 additions & 0 deletions code/Person.pm
@@ -0,0 +1,50 @@
package Person;
use Moose;
use Moose::Util::TypeConstraints;
use DateTime;
use DateTime::Format::Strptime;

subtype 'BirthDate',
as 'DateTime';

coerce 'BirthDate',
from 'Str',
via {
return DateTime::Format::Strptime->new(
pattern => '%Y-%m-%d',
)->parse_datetime($_);
};

subtype 'Gender',
as 'Str',
where { /^[FM]$/ },
message { "$_ is not a valid gender. It should be F or M" };

has name => (
isa => 'Str',
is => 'rw',
required => 1,
);

has dob => (
isa => 'BirthDate',
is => 'ro',
required => 1,
coerce => 1,
);

has gender => (
isa => 'Gender',
is => 'rw',
required => 1,
);

sub age {
my $self = shift;

my $duration = DateTime->now - $self->dob;

return $duration->years;
}

1;
18 changes: 18 additions & 0 deletions code/person
@@ -0,0 +1,18 @@
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use DateTime;
use Person;

my $newborn = Person->new(
name => 'Miles',
dob => DateTime->now,
gender => 'M'
);

say $newborn->name; # displays 'Miles'
say $newborn->dob; # displays current date
$newborn->name('Max'); # Parents change their minds
say $newborn->name; # displays 'Max'
say $newborn->dob->day_name;
16 changes: 16 additions & 0 deletions code/person1
@@ -0,0 +1,16 @@
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use DateTime;
use Person;

my $dob = DateTime->new(year => 1962, month => 9, day => 7);

my $dave = Person->new(
name => 'Dave',
dob => $dob,
gender => 'M'
);

say $dave->dob->day_name;
20 changes: 20 additions & 0 deletions code/person2
@@ -0,0 +1,20 @@
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use DateTime::Format::Strptime;
use Person;

my $date_parser = DateTime::Format::Strptime->new(
pattern => '%Y-%m-%d',
);

my $dob = $date_parser->parse_datetime('1962-09-07');

my $dave = Person->new(
name => 'Dave',
dob => $dob,
gender => 'M'
);

say $dave->dob->day_name;
13 changes: 13 additions & 0 deletions code/person3
@@ -0,0 +1,13 @@
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Person;

my $dave = Person->new(
name => 'Dave',
dob => '1962-09-07',
gender => 'M'
);

say $dave->dob->day_name;
13 changes: 13 additions & 0 deletions code/person4
@@ -0,0 +1,13 @@
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Person;

my $dave = Person->new(
name => 'Dave',
dob => '1962-09-07',
gender => 'X'
);

say $dave->dob->day_name;
13 changes: 13 additions & 0 deletions code/person5
@@ -0,0 +1,13 @@
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Person;

my $dave = Person->new(
name => 'Dave',
dob => '1962-09-07',
gender => 'M'
);

say $dave->age;

0 comments on commit 1bb5428

Please sign in to comment.