Commit | Line | Data |
471c4f09 |
1 | |
2 | =pod |
3 | |
4 | =head1 NAME |
5 | |
6 | Moose::Cookbook - How to cook a Moose |
7 | |
8 | =head1 DESCRIPTION |
9 | |
4711f5f7 |
10 | The Moose cookbook is a series of recipes taken from the Moose |
471c4f09 |
11 | test suite. Each recipe presents some code, which demonstrates |
12 | some of the features of Moose, and then proceeds to explain the |
13 | details of the code. |
14 | |
734d1752 |
15 | We also provide a L<Moose::Cookbook::FAQ> and a L<Moose::Cookbook::WTF> |
16 | for common questions and problems people have with Moose. |
17 | |
471c4f09 |
18 | =head1 RECIPES |
19 | |
496b74ab |
20 | =head2 Basic Moose |
21 | |
4eec354b |
22 | These recipes will give you a good idea of what Moose is capable, |
23 | starting with simple attribute declaration, and moving on to more |
24 | powerful features like laziness, types, type coercion, method |
25 | modifiers, and more. |
26 | |
471c4f09 |
27 | =over 4 |
28 | |
021b8139 |
29 | =item L<Moose::Cookbook::Basics::Recipe1> - The (always classic) B<Point> example |
471c4f09 |
30 | |
f7f3648d |
31 | A simple Moose-based class. Demonstrated Moose attributes and subclassing. |
cb2478d4 |
32 | |
021b8139 |
33 | =item L<Moose::Cookbook::Basics::Recipe2> - A simple B<BankAccount> example |
471c4f09 |
34 | |
f7f3648d |
35 | A slightly more complex Moose class. Demonstrates using a method |
36 | modifier in a subclass. |
cb2478d4 |
37 | |
021b8139 |
38 | =item L<Moose::Cookbook::Basics::Recipe3> - A lazy B<BinaryTree> example |
471c4f09 |
39 | |
f7f3648d |
40 | Demonstrates several attribute features, including types, weak |
41 | references, predicates ("does this object have a foo?"), defaults, and |
5cfe3805 |
42 | lazy attribute uction. |
cb2478d4 |
43 | |
021b8139 |
44 | =item L<Moose::Cookbook::Basics::Recipe4> - Subtypes, and modeling a simple B<Company> class hierarchy |
471c4f09 |
45 | |
f7f3648d |
46 | Introduces the creation and use of custom types, a C<BUILD> method, |
47 | and the use of C<override> in a subclass. |
cb2478d4 |
48 | |
021b8139 |
49 | =item L<Moose::Cookbook::Basics::Recipe5> - More subtypes, coercion in a B<Request> class |
471c4f09 |
50 | |
f7f3648d |
51 | More type examples, including the use of type coercions. |
cb2478d4 |
52 | |
021b8139 |
53 | =item L<Moose::Cookbook::Basics::Recipe6> - The augment/inner example |
496b74ab |
54 | |
f7f3648d |
55 | Demonstrates the use of C<augment> method modifiers, a way of turning |
56 | the usual method overriding style "inside-out". |
cb2478d4 |
57 | |
021b8139 |
58 | =item L<Moose::Cookbook::Basics::Recipe7> - Making Moose fast with immutable |
496b74ab |
59 | |
5de2944f |
60 | Making a class immutable greatly increases the speed of accessors and |
61 | object construction. |
cb2478d4 |
62 | |
021b8139 |
63 | =item L<Moose::Cookbook::Basics::Recipe8> - Managing complex relations with trigger (TODO) |
496b74ab |
64 | |
cb2478d4 |
65 | I<abstract goes here> |
66 | |
2be55428 |
67 | Work off of this http://code2.0beta.co.uk/moose/svn/Moose/trunk/t/200_examples/007_Child_Parent_attr_inherit.t |
68 | |
021b8139 |
69 | =item L<Moose::Cookbook::Basics::Recipe9> - Builder methods and lazy_build |
496b74ab |
70 | |
fbd7ad7a |
71 | The builder feature provides an inheritable and role-composable way to |
72 | provide a default attribute value. |
cb2478d4 |
73 | |
58d129ba |
74 | =item L<Moose::Cookbook::Basics::Recipe10> - Operator overloading, subtypes, and coercion |
c2a0627f |
75 | |
48757542 |
76 | Demonstrates using operator overloading, coercion, and subtypes to |
a8b3fe62 |
77 | model how eye color is determined during reproduction. |
c2a0627f |
78 | |
496b74ab |
79 | =back |
80 | |
81 | =head2 Moose Roles |
82 | |
4eec354b |
83 | These recipes will show you how to use Moose roles. |
84 | |
496b74ab |
85 | =over 4 |
86 | |
021b8139 |
87 | =item L<Moose::Cookbook::Role::Recipe1> - The Moose::Role example |
496b74ab |
88 | |
f7f3648d |
89 | Demonstrates roles, which are also sometimes known as traits or |
90 | mix-ins. Roles provide a method of code re-use which is orthogonal to |
91 | subclassing. |
cb2478d4 |
92 | |
021b8139 |
93 | =item L<Moose::Cookbook::Role::Recipe2> - Advanced Role Composition - method exclusion and aliasing |
496b74ab |
94 | |
2e3d0a0a |
95 | Sometimes you just want to include part of a role in your |
96 | class. Sometimes you want the whole role but one if its methods |
97 | conflicts with one in your class. With method exclusion and aliasing, |
98 | you can work around these problems. |
cb2478d4 |
99 | |
021b8139 |
100 | =item L<Moose::Cookbook::Role::Recipe3> - Runtime Role Composition (TODO) |
104379bc |
101 | |
cb2478d4 |
102 | I<abstract goes here> |
103 | |
496b74ab |
104 | =back |
105 | |
106 | =head2 Meta Moose |
107 | |
4eec354b |
108 | These recipes show you how to write your own meta classes, which lets |
109 | you extend the object system provide by Moose. |
110 | |
496b74ab |
111 | =over 4 |
112 | |
17a65b17 |
113 | =item L<Moose::Cookbook::Meta::Recipe1> - Welcome to the meta-world (Why Go Meta?) |
496b74ab |
114 | |
cb2478d4 |
115 | I<abstract goes here> |
116 | |
43aa5bf9 |
117 | =item L<Moose::Cookbook::Meta::Recipe2> - A meta-attribute, attributes with labels |
496b74ab |
118 | |
f7f3648d |
119 | One way to extend Moose is to provide your own attribute |
120 | metaclasses. Attribute metaclasses let you extend attribute |
121 | declarations (with C<has>) and behavior to provide additional |
122 | attribute functionality. |
cb2478d4 |
123 | |
43aa5bf9 |
124 | =item L<Moose::Cookbook::Meta::Recipe3> - Labels implemented via attribute traits |
a7d0cd00 |
125 | |
aff0421c |
126 | Extending Moose's attribute metaclass is a great way to add |
127 | functionality. However, attributes can only have one metaclass. |
128 | Applying roles to the attribute metaclass lets you provide |
129 | composable attribute functionality. |
cb2478d4 |
130 | |
3f002851 |
131 | =item L<Moose::Cookbook::Meta::Recipe4> - Adding a "table" attribute to the metaclass |
132 | |
133 | If you want to store more information about your classes, you'll have |
134 | to extend C<Moose::Meta::Class>. Doing so is simple, but you'll |
135 | probably also want to provide some sugar, so see |
136 | L<Moose::Cookbook::Meta::Recipe6> as well. |
137 | |
138 | =item L<Moose::Cookbook::Meta::Recipe5> - The "table" attribute implemented via a metaclass trait |
24a8fe99 |
139 | |
cb2478d4 |
140 | I<abstract goes here> |
141 | |
6fa0a13f |
142 | =item L<Moose::Cookbook::Meta::Recipe6> - I<meta-instance> (TODO) |
1edfdf1c |
143 | |
cb2478d4 |
144 | I<abstract goes here> |
145 | |
6fa0a13f |
146 | =head2 Extending Moose |
147 | |
4eec354b |
148 | These recipes cover some more ways to extend Moose, and will be useful |
149 | if you plan to write your own C<MooseX> module. |
150 | |
6fa0a13f |
151 | =item L<Moose::Cookbook::Extending::Recipe1> - Providing an alternate base object class |
152 | |
153 | You may find that you want to provide an alternate base object class |
154 | along with a meta extension, or maybe you just want to add some |
155 | functionality to all your classes without typing C<extends |
156 | 'MyApp::Base'> over and over. |
157 | |
158 | =item L<Moose::Cookbook::Extending::Recipe2> - Acting like Moose.pm and providing sugar Moose-style |
159 | |
160 | You'll often find that you want to provide a replacement for |
161 | C<Moose.pm> as part of a meta extension. This is especially true if |
2bd516f9 |
162 | you want to write default to your own metaclass or base object class. |
6fa0a13f |
163 | |
cb2478d4 |
164 | =back |
165 | |
166 | =head1 SNACKS |
167 | |
168 | =over 4 |
169 | |
f4ebf54f |
170 | =item L<Moose::Cookbook::Snack::Keywords> |
171 | |
cb2478d4 |
172 | =item L<Moose::Cookbook::Snack::Types> |
173 | |
471c4f09 |
174 | =back |
175 | |
176 | =head1 SEE ALSO |
177 | |
178 | =over 4 |
179 | |
8bdc7f13 |
180 | =item L<http://www.gsph.com/index.php?Lang=En&ID=291> |
471c4f09 |
181 | |
182 | =back |
183 | |
184 | =head1 AUTHOR |
185 | |
186 | Stevan Little E<lt>stevan@iinteractive.comE<gt> |
187 | |
188 | =head1 COPYRIGHT AND LICENSE |
189 | |
778db3ac |
190 | Copyright 2006-2008 by Infinity Interactive, Inc. |
471c4f09 |
191 | |
192 | L<http://www.iinteractive.com> |
193 | |
194 | This library is free software; you can redistribute it and/or modify |
195 | it under the same terms as Perl itself. |
196 | |
f7f3648d |
197 | =cut |