3 * concepts (ala Moose::Manual::Concepts)
7 * Making a class use Moose
11 ** has 'foo' => ( is => ... ) (ro & rw)
12 ** no other attribute features yet
18 * Build a Person class that uses Moose
21 ** assume both attributes are always provided
22 * build an Employee class that is a subclass of Person
30 * consuming roles in classes
31 * consuming roles in roles
36 * build a role for Human
37 * make the Person class consume the role
38 * make the role require a "full_name" method
39 * implement this method for Person
40 * override it for Employee to include their title
50 * attribute inheritance
51 * MX attribute naming modules
55 * Go back to Person class
56 ** make first & last name required
58 ** make title default to "Worker"
59 ** add predicate & clearer for title
60 ** add salary_level attribute, number from 1-10
61 ** salary, lazy default of salary_level * 1,000, init_arg is undef
66 ** before for state validation
67 ** after for additional state changes
69 ** modifying arguments & return values
70 * method modifiers in roles
71 ** requiring the wrapped method
79 * parameterizable types
83 ** class names & role names
86 * attribute isa & does
87 * attribute coerce => 1
92 * Add sane types to all existing attributes in Person, Employee, roles
93 * Add an email attribute. Make a new email type that does some minimal validate like /[^@]+\@[\w\-]+(?:\.[\w\-]+)+/
104 * Make the bank account a proper object and delegate to it for deposit & withdraw
105 * Add an overdraft account like in the cookbook
106 * Make the overdraft account link bank to accounts which link to it as a weak_ref
107 * metaclass & traits?
111 * List of attributes for a class
113 ** associated methods
114 * List of methods for a class
115 ** associated attributes
116 ** check original_package for source of method (did it come from a role?)
117 ** $method->isa(...) to determine if it's wrapped/augmented/overridden
118 * List of parent classes, subclasses
123 ** delegation for Perl built-ins
124 ** private accessor with public provides (_options as the attribute, get_option, set_option, options_list)
125 ** lazy default of an empty reference
126 * ::StrictConstructor
135 = Writing a MooseX Module