Add built local::lib
[catagits/Gitalist.git] / local-lib5 / man / man3 / MooseX::Role::Parameterized.3pm
1 .\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.10)
2 .\"
3 .\" Standard preamble:
4 .\" ========================================================================
5 .de Sp \" Vertical space (when we can't use .PP)
6 .if t .sp .5v
7 .if n .sp
8 ..
9 .de Vb \" Begin verbatim text
10 .ft CW
11 .nf
12 .ne \\$1
13 ..
14 .de Ve \" End verbatim text
15 .ft R
16 .fi
17 ..
18 .\" Set up some character translations and predefined strings.  \*(-- will
19 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
20 .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
21 .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
22 .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
23 .\" nothing in troff, for use with C<>.
24 .tr \(*W-
25 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
26 .ie n \{\
27 .    ds -- \(*W-
28 .    ds PI pi
29 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
30 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
31 .    ds L" ""
32 .    ds R" ""
33 .    ds C` ""
34 .    ds C' ""
35 'br\}
36 .el\{\
37 .    ds -- \|\(em\|
38 .    ds PI \(*p
39 .    ds L" ``
40 .    ds R" ''
41 'br\}
42 .\"
43 .\" Escape single quotes in literal strings from groff's Unicode transform.
44 .ie \n(.g .ds Aq \(aq
45 .el       .ds Aq '
46 .\"
47 .\" If the F register is turned on, we'll generate index entries on stderr for
48 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
49 .\" entries marked with X<> in POD.  Of course, you'll have to process the
50 .\" output yourself in some meaningful fashion.
51 .ie \nF \{\
52 .    de IX
53 .    tm Index:\\$1\t\\n%\t"\\$2"
54 ..
55 .    nr % 0
56 .    rr F
57 .\}
58 .el \{\
59 .    de IX
60 ..
61 .\}
62 .\"
63 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
64 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
65 .    \" fudge factors for nroff and troff
66 .if n \{\
67 .    ds #H 0
68 .    ds #V .8m
69 .    ds #F .3m
70 .    ds #[ \f1
71 .    ds #] \fP
72 .\}
73 .if t \{\
74 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
75 .    ds #V .6m
76 .    ds #F 0
77 .    ds #[ \&
78 .    ds #] \&
79 .\}
80 .    \" simple accents for nroff and troff
81 .if n \{\
82 .    ds ' \&
83 .    ds ` \&
84 .    ds ^ \&
85 .    ds , \&
86 .    ds ~ ~
87 .    ds /
88 .\}
89 .if t \{\
90 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
91 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
92 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
93 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
94 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
95 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
96 .\}
97 .    \" troff and (daisy-wheel) nroff accents
98 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
99 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
100 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
101 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
102 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
103 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
104 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
105 .ds ae a\h'-(\w'a'u*4/10)'e
106 .ds Ae A\h'-(\w'A'u*4/10)'E
107 .    \" corrections for vroff
108 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
109 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
110 .    \" for low resolution devices (crt and lpr)
111 .if \n(.H>23 .if \n(.V>19 \
112 \{\
113 .    ds : e
114 .    ds 8 ss
115 .    ds o a
116 .    ds d- d\h'-1'\(ga
117 .    ds D- D\h'-1'\(hy
118 .    ds th \o'bp'
119 .    ds Th \o'LP'
120 .    ds ae ae
121 .    ds Ae AE
122 .\}
123 .rm #[ #] #H #V #F C
124 .\" ========================================================================
125 .\"
126 .IX Title "MooseX::Role::Parameterized 3"
127 .TH MooseX::Role::Parameterized 3 "2009-12-07" "perl v5.8.7" "User Contributed Perl Documentation"
128 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
129 .\" way too many mistakes in technical documents.
130 .if n .ad l
131 .nh
132 .SH "NAME"
133 MooseX::Role::Parameterized \- roles with composition parameters
134 .SH "SYNOPSIS"
135 .IX Header "SYNOPSIS"
136 .Vb 2
137 \&    package Counter;
138 \&    use MooseX::Role::Parameterized;
139 \&
140 \&    parameter name => (
141 \&        isa      => \*(AqStr\*(Aq,
142 \&        required => 1,
143 \&    );
144 \&
145 \&    role {
146 \&        my $p = shift;
147 \&
148 \&        my $name = $p\->name;
149 \&
150 \&        has $name => (
151 \&            is      => \*(Aqrw\*(Aq,
152 \&            isa     => \*(AqInt\*(Aq,
153 \&            default => 0,
154 \&        );
155 \&
156 \&        method "increment_$name" => sub {
157 \&            my $self = shift;
158 \&            $self\->$name($self\->$name + 1);
159 \&        };
160 \&
161 \&        method "reset_$name" => sub {
162 \&            my $self = shift;
163 \&            $self\->$name(0);
164 \&        };
165 \&    };
166 \&
167 \&    package MyGame::Weapon;
168 \&    use Moose;
169 \&
170 \&    with Counter => { name => \*(Aqenchantment\*(Aq };
171 \&
172 \&    package MyGame::Wand;
173 \&    use Moose;
174 \&
175 \&    with Counter => { name => \*(Aqzapped\*(Aq };
176 .Ve
177 .SH "MooseX::Role::Parameterized::Tutorial"
178 .IX Header "MooseX::Role::Parameterized::Tutorial"
179 \&\fBStop!\fR If you're new here, please read
180 MooseX::Role::Parameterized::Tutorial for a much gentler introduction.
181 .SH "DESCRIPTION"
182 .IX Header "DESCRIPTION"
183 Your parameterized role consists of two new things: parameter declarations
184 and a \f(CW\*(C`role\*(C'\fR block.
185 .PP
186 Parameters are declared using the \*(L"parameter\*(R" keyword which very much
187 resembles \*(L"has\*(R" in Moose. You can use any option that \*(L"has\*(R" in Moose accepts. The
188 default value for the \f(CW\*(C`is\*(C'\fR option is \f(CW\*(C`ro\*(C'\fR as that's a very common case. Use
189 \&\f(CW\*(C`is => \*(Aqbare\*(Aq\*(C'\fR if you want no accessor. These parameters will get their
190 values when the consuming class (or role) uses \*(L"with\*(R" in Moose. A parameter
191 object will be constructed with these values, and passed to the \f(CW\*(C`role\*(C'\fR block.
192 .PP
193 The \f(CW\*(C`role\*(C'\fR block then uses the usual Moose::Role keywords to build up a
194 role. You can shift off the parameter object to inspect what the consuming
195 class provided as parameters. You use the parameters to customize your
196 role however you wish.
197 .PP
198 There are many possible implementations for parameterized roles (hopefully with
199 a consistent enough \s-1API\s0); I believe this to be the easiest and most flexible
200 design. Coincidentally, Pugs originally had an eerily similar design.
201 .SS "Why a parameters object?"
202 .IX Subsection "Why a parameters object?"
203 I've been asked several times "Why use a parameter \fIobject\fR and not just a
204 parameter \fIhashref\fR? That would eliminate the need to explicitly declare your
205 parameters."
206 .PP
207 The benefits of using an object are similar to the benefits of using Moose. You
208 get an easy way to specify lazy defaults, type constraint, delegation, and so
209 on. You get to use MooseX modules.
210 .PP
211 You also get the usual introspective and intercessory abilities that come
212 standard with the metaobject protocol. Ambitious users should be able to add
213 traits to the parameters metaclass to further customize behavior. Please let
214 me know if you're doing anything viciously complicated with this extension. :)
215 .SH "CAVEATS"
216 .IX Header "CAVEATS"
217 You must use this syntax to declare methods in the role block:
218 \&\f(CW\*(C`method NAME => sub { ... };\*(C'\fR. This is due to a limitation in Perl. In
219 return though you can use parameters \fIin your methods\fR!
220 .PP
221 \&\*(L"alias\*(R" in Moose::Role and \*(L"excludes\*(R" in Moose::Role are not yet supported. I'm
222 completely unsure of whether they should be handled by this module. Until we
223 figure out a plan, either declaring or providing a parameter named \f(CW\*(C`alias\*(C'\fR or
224 \&\f(CW\*(C`excludes\*(C'\fR is an error.
225 .SH "AUTHOR"
226 .IX Header "AUTHOR"
227 Shawn M Moore, \f(CW\*(C`sartak@gmail.com\*(C'\fR
228 .SH "EXAMPLES"
229 .IX Header "EXAMPLES"
230 .IP "Fey::Role::HasAliasName" 4
231 .IX Item "Fey::Role::HasAliasName"
232 .PD 0
233 .IP "Fey::Role::MakesAliasObjects" 4
234 .IX Item "Fey::Role::MakesAliasObjects"
235 .IP "Fey::Role::SQL::Cloneable" 4
236 .IX Item "Fey::Role::SQL::Cloneable"
237 .IP "Fey::Role::SetOperation" 4
238 .IX Item "Fey::Role::SetOperation"
239 .IP "IM::Engine::PluggableConstructor" 4
240 .IX Item "IM::Engine::PluggableConstructor"
241 .IP "IM::Engine::RequiresPlugins" 4
242 .IX Item "IM::Engine::RequiresPlugins"
243 .IP "KiokuDB::Role::Scan" 4
244 .IX Item "KiokuDB::Role::Scan"
245 .IP "MooseX::RelatedClassRoles" 4
246 .IX Item "MooseX::RelatedClassRoles"
247 .IP "MooseX::Role::Matcher" 4
248 .IX Item "MooseX::Role::Matcher"
249 .IP "MooseX::Role::XMLRPC::Client" 4
250 .IX Item "MooseX::Role::XMLRPC::Client"
251 .IP "MooseX::WithCache" 4
252 .IX Item "MooseX::WithCache"
253 .IP "Net::Journyx::Object::Loadable" 4
254 .IX Item "Net::Journyx::Object::Loadable"
255 .IP "NetHack::Item::Role::IncorporatesStats" 4
256 .IX Item "NetHack::Item::Role::IncorporatesStats"
257 .IP "TAEB::Action::Role::Item" 4
258 .IX Item "TAEB::Action::Role::Item"
259 .IP "WWW::Mechanize::TreeBuilder" 4
260 .IX Item "WWW::Mechanize::TreeBuilder"
261 .PD
262 .SH "SEE ALSO"
263 .IX Header "SEE ALSO"
264 <http://sartak.blogspot.com/2009/05/parameterized\-roles.html>
265 .PP
266 <http://stevan\-little.blogspot.com/2009/07/thoughts\-on\-parameterized\-roles.html>
267 .PP
268 <http://sartak.org/talks/yapc\-asia\-2009/(parameterized)\-roles/>
269 .SH "COPYRIGHT AND LICENSE"
270 .IX Header "COPYRIGHT AND LICENSE"
271 Copyright 2007\-2009 Infinity Interactive
272 .PP
273 This program is free software; you can redistribute it and/or modify it
274 under the same terms as Perl itself.