Clarify how to check whether old value is passed to a trigger
[gitmo/moose-presentations.git] / moose-class / exercises / t / 06-advanced-attributes.t
CommitLineData
66b226e5 1# Your tasks ...
2#
f867e81a 3# First, you must make the account associated with a Person a proper
4# class of its own. Call it BankAccount.
66b226e5 5#
6# This class should have two attributes, "balance", an Int that
7# defaults to 100, and "owner", a Person object.
8#
9# The owner attribute should be a weak reference to prevent cycles.
10#
11# Copy the deposit and withdraw methods from the HasAccount role.
12#
ed84c5c6 13# Finally, add a read-only history attribute. This will be an ArrayRef of
54289814 14# Int's. This should default to an empty array reference. Use a Native
15# delegation method to push values onto this attribute.
66b226e5 16#
648519ab 17# Use a trigger to record the _old value_ of the balance each time it
ed84c5c6 18# changes. This means your trigger should not do anything if it is not passed
f867e81a 19# an old value (this will be the case when the attribute is set for the first
0f1b9555 20# time). You can check for the presence of an old value by looking at the
21# number of elements passed to the trigger in the @_ array.
66b226e5 22#
f867e81a 23# Now you can delete the HasAccount role entirely. Instead, add an "account"
24# attribute to Person directly.
66b226e5 25#
f867e81a 26# This new account attribute should default to a new BankAccount object. Use
27# delegation so that when the code calls Person->deposit and Person->withdraw,
28# it calls those methods on the person's BankAccount object.
66b226e5 29#
30# Add a BUILD method to the Person class to set the owner of the
31# Person's bank account to $self.
32
33use strict;
34use warnings;
35
36use lib 't/lib';
37
38use MooseClass::Tests;
39
66b226e5 40MooseClass::Tests::tests06();