1 .\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.3
4 .\" ========================================================================
5 .de Sh \" Subsection heading
13 .de Sp \" Vertical space (when we can't use .PP)
17 .de Vb \" Begin verbatim text
22 .de Ve \" End verbatim text
26 .\" Set up some character translations and predefined strings. \*(-- will
27 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
28 .\" double quote, and \*(R" will give a right double quote. | will give a
29 .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
30 .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
31 .\" expand to `' in nroff, nothing in troff, for use with C<>.
33 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
37 . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
38 . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
51 .\" If the F register is turned on, we'll generate index entries on stderr for
52 .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
53 .\" entries marked with X<> in POD. Of course, you'll have to process the
54 .\" output yourself in some meaningful fashion.
57 . tm Index:\\$1\t\\n%\t"\\$2"
63 .\" For nroff, turn off justification. Always turn off hyphenation; it makes
64 .\" way too many mistakes in technical documents.
68 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
69 .\" Fear. Run. Save yourself. No user-serviceable parts.
70 . \" fudge factors for nroff and troff
79 . ds #H ((1u-(\\\\n(.fu%2u))*.13m)
85 . \" simple accents for nroff and troff
95 . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
96 . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
97 . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
98 . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
99 . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
100 . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
102 . \" troff and (daisy-wheel) nroff accents
103 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
104 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
105 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
106 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
107 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
108 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
109 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
110 .ds ae a\h'-(\w'a'u*4/10)'e
111 .ds Ae A\h'-(\w'A'u*4/10)'E
112 . \" corrections for vroff
113 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
114 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
115 . \" for low resolution devices (crt and lpr)
116 .if \n(.H>23 .if \n(.V>19 \
129 .\" ========================================================================
131 .IX Title "Moose::Cookbook::Meta::Recipe4 3"
132 .TH Moose::Cookbook::Meta::Recipe4 3 "2009-03-14" "perl v5.8.7" "User Contributed Perl Documentation"
134 Moose::Cookbook::Meta::Recipe4 \- Adding a "table" attribute to the metaclass
136 .IX Header "SYNOPSIS"
138 \& package MyApp::Meta::Class;
140 \& extends 'Moose::Meta::Class';
150 .IX Header "DESCRIPTION"
151 In this recipe, we'll create a new metaclass which has a \*(L"table\*(R"
152 attribute. This metaclass is for classes associated with a \s-1DBMS\s0 table,
153 as one might do for an \s-1ORM\s0.
155 In this example, the table name is just a string, but in a real \s-1ORM\s0
156 the table might be an object describing the table.
158 .IX Header "THE METACLASS"
159 This really is as simple as the recipe \*(L"\s-1SYNOPSIS\s0\*(R" shows. The trick
160 is getting your classes to use this metaclass, and providing some sort
161 of sugar for declaring the table. This is covered in
162 Moose::Cookbook::Extending::Recipe2, which shows how to make a
163 module like \f(CW\*(C`Moose.pm\*(C'\fR itself, with sugar like \f(CW\*(C`has_table()\*(C'\fR.
164 .Sh "Using this Metaclass in Practice"
165 .IX Subsection "Using this Metaclass in Practice"
166 Accessing this new \f(CW\*(C`table\*(C'\fR attribute is quite simple. Given a class
167 named \f(CW\*(C`MyApp::User\*(C'\fR, we could simply write the following:
170 \& my $table = MyApp::User\->meta\->table;
173 As long as \f(CW\*(C`MyApp::User\*(C'\fR has arranged to use \f(CW\*(C`MyApp::Meta::Class\*(C'\fR as
174 its metaclass, this method call just works. If we want to be more
175 careful, we can check the metaclass's class:
178 \& $table = MyApp::User\->meta\->table
179 \& if MyApp::User\->meta\->isa('MyApp::Meta::Class');
182 .IX Header "CONCLUSION"
183 Creating custom metaclass is trivial. Using it is a little harder, and
184 is covered in other recipes. We will also talk about applying traits
185 to a class metaclass, which is a more flexible and cooperative
188 .IX Header "SEE ALSO"
189 Moose::Cookbook::Meta::Recipe5 \- The \*(L"table\*(R" attribute implemented
192 Moose::Cookbook::Extending::Recipe2 \- Acting like Moose.pm and
193 providing sugar Moose-style
196 Dave Rolsky <autarch@urth.org>
197 .SH "COPYRIGHT AND LICENSE"
198 .IX Header "COPYRIGHT AND LICENSE"
199 Copyright 2006\-2009 by Infinity Interactive, Inc.
201 <http://www.iinteractive.com>
203 This library is free software; you can redistribute it and/or modify
204 it under the same terms as Perl itself.