Slide 39
Slide 39 text
package Employee;
use Moose;
extends 'Person';
has 'job_title' => (
is => 'rw',
isa => 'Str’
);
has 'manager' => (
is => 'ro',
isa => 'Manager',
clearer => 'remove_manager',
predicate => 'has_manager',
handles => {
coworkers => 'staff',
}
);
package Manager;
use Moose;
use MooseX::AttributeHelpers;
extends 'Employee';
has '+job_title' => (default => 'Manager');
has 'staff' => (
metaclass => 'Collection::Array',
is => 'ro',
isa => 'ArrayRef[Employee]',
default => sub { [] },
provides => {
count => 'staff_size',
empty => 'has_staff',
push => 'add_to_staff',
pop => 'lay_off_new_guy',
}
);
after 'add_to_staff' => sub {
my ($self, $employee) = @_;
$employee->manager($self);
};