Add built local::lib
[catagits/Gitalist.git] / local-lib5 / man / man3 / MooseX::Role::Parameterized.3pm
CommitLineData
3fea05b9 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"
133MooseX::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
180MooseX::Role::Parameterized::Tutorial for a much gentler introduction.
181.SH "DESCRIPTION"
182.IX Header "DESCRIPTION"
183Your parameterized role consists of two new things: parameter declarations
184and a \f(CW\*(C`role\*(C'\fR block.
185.PP
186Parameters are declared using the \*(L"parameter\*(R" keyword which very much
187resembles \*(L"has\*(R" in Moose. You can use any option that \*(L"has\*(R" in Moose accepts. The
188default 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
190values when the consuming class (or role) uses \*(L"with\*(R" in Moose. A parameter
191object will be constructed with these values, and passed to the \f(CW\*(C`role\*(C'\fR block.
192.PP
193The \f(CW\*(C`role\*(C'\fR block then uses the usual Moose::Role keywords to build up a
194role. You can shift off the parameter object to inspect what the consuming
195class provided as parameters. You use the parameters to customize your
196role however you wish.
197.PP
198There are many possible implementations for parameterized roles (hopefully with
199a consistent enough \s-1API\s0); I believe this to be the easiest and most flexible
200design. Coincidentally, Pugs originally had an eerily similar design.
201.SS "Why a parameters object?"
202.IX Subsection "Why a parameters object?"
203I've been asked several times "Why use a parameter \fIobject\fR and not just a
204parameter \fIhashref\fR? That would eliminate the need to explicitly declare your
205parameters."
206.PP
207The benefits of using an object are similar to the benefits of using Moose. You
208get an easy way to specify lazy defaults, type constraint, delegation, and so
209on. You get to use MooseX modules.
210.PP
211You also get the usual introspective and intercessory abilities that come
212standard with the metaobject protocol. Ambitious users should be able to add
213traits to the parameters metaclass to further customize behavior. Please let
214me know if you're doing anything viciously complicated with this extension. :)
215.SH "CAVEATS"
216.IX Header "CAVEATS"
217You 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
219return 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
222completely unsure of whether they should be handled by this module. Until we
223figure 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"
227Shawn 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"
271Copyright 2007\-2009 Infinity Interactive
272.PP
273This program is free software; you can redistribute it and/or modify it
274under the same terms as Perl itself.