Commit | Line | Data |
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 | |
33 | use strict; |
34 | use warnings; |
35 | |
36 | use lib 't/lib'; |
37 | |
38 | use MooseClass::Tests; |
39 | |
66b226e5 |
40 | MooseClass::Tests::tests06(); |