Add built local::lib
[catagits/Gitalist.git] / local-lib5 / man / man3 / MooseX::Traits.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::Traits 3"
127 .TH MooseX::Traits 3 "2009-08-17" "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::Traits \- automatically apply roles at object creation time
134 .SH "SYNOPSIS"
135 .IX Header "SYNOPSIS"
136 Given some roles:
137 .PP
138 .Vb 3
139 \&  package Role;
140 \&  use Moose::Role;
141 \&  has foo => ( is => \*(Aqro\*(Aq, isa => \*(AqInt\*(Aq required => 1 );
142 .Ve
143 .PP
144 And a class:
145 .PP
146 .Vb 3
147 \&  package Class;
148 \&  use Moose;
149 \&  with \*(AqMooseX::Traits\*(Aq;
150 .Ve
151 .PP
152 Apply the roles to the class at \f(CW\*(C`new\*(C'\fR time:
153 .PP
154 .Vb 1
155 \&  my $class = Class\->new_with_traits( traits => [\*(AqRole\*(Aq], foo => 42 );
156 .Ve
157 .PP
158 Then use your customized class:
159 .PP
160 .Vb 3
161 \&  $class\->isa(\*(AqClass\*(Aq); # true
162 \&  $class\->does(\*(AqRole\*(Aq); # true
163 \&  $class\->foo; # 42
164 .Ve
165 .PP
166 To apply traits to an existing instance:
167 .PP
168 .Vb 1
169 \&  $self\->apply_traits([qw/Role1 Role2/], { rebless_params => \*(Aqgo here\*(Aq });
170 .Ve
171 .SH "DESCRIPTION"
172 .IX Header "DESCRIPTION"
173 Often you want to create components that can be added to a class
174 arbitrarily.  This module makes it easy for the end user to use these
175 components.  Instead of requiring the user to create a named class
176 with the desired roles applied, or applying roles to the instance
177 one-by-one, he can just pass a \f(CW\*(C`traits\*(C'\fR parameter to the class's
178 \&\f(CW\*(C`new_with_traits\*(C'\fR constructor.  This role will then apply the roles
179 in one go, cache the resulting class (for efficiency), and return a
180 new instance.  Arguments meant to initialize the applied roles'
181 attributes can also be passed to the constructor.
182 .PP
183 Alternatively, traits can be applied to an instance with \f(CW\*(C`apply_traits\*(C'\fR,
184 arguments for initializing attributes in consumed roles can be in \f(CW%$self\fR
185 (useful for e.g. Catalyst components.)
186 .SH "METHODS"
187 .IX Header "METHODS"
188 .ie n .IP "\fB\fB$class\fB\->new_with_traits(%args, traits => \e@traits)\fR" 4
189 .el .IP "\fB\f(CB$class\fB\->new_with_traits(%args, traits => \e@traits)\fR" 4
190 .IX Item "$class->new_with_traits(%args, traits => @traits)"
191 \&\f(CW\*(C`new_with_traits\*(C'\fR can also take a hashref, e.g.:
192 .Sp
193 .Vb 1
194 \&  my $instance = $class\->new_with_traits({ traits => \e@traits, foo => \*(Aqbar\*(Aq });
195 .Ve
196 .SH "ATTRIBUTES YOUR CLASS GETS"
197 .IX Header "ATTRIBUTES YOUR CLASS GETS"
198 This role will add the following attributes to the consuming class.
199 .SS "_trait_namespace"
200 .IX Subsection "_trait_namespace"
201 You can override the value of this attribute with \f(CW\*(C`default\*(C'\fR to
202 automatically prepend a namespace to the supplied traits.  (This can
203 be overridden by prefixing the trait name with \f(CW\*(C`+\*(C'\fR.)
204 .PP
205 Example:
206 .PP
207 .Vb 7
208 \&  package Another::Trait;
209 \&  use Moose::Role;
210 \&  has \*(Aqbar\*(Aq => (
211 \&      is       => \*(Aqro\*(Aq,
212 \&      isa      => \*(AqStr\*(Aq,
213 \&      required => 1,
214 \&  );
215 \&
216 \&  package Another::Class;
217 \&  use Moose;
218 \&  with \*(AqMooseX::Traits\*(Aq;
219 \&  has \*(Aq+_trait_namespace\*(Aq => ( default => \*(AqAnother\*(Aq );
220 \&
221 \&  my $instance = Another::Class\->new_with_traits(
222 \&      traits => [\*(AqTrait\*(Aq], # "Another::Trait", not "Trait"
223 \&      bar    => \*(Aqbar\*(Aq,
224 \&  );
225 \&  $instance\->does(\*(AqTrait\*(Aq)          # false
226 \&  $instance\->does(\*(AqAnother::Trait\*(Aq) # true
227 \&
228 \&  my $instance2 = Another::Class\->new_with_traits(
229 \&      traits => [\*(Aq+Trait\*(Aq], # "Trait", not "Another::Trait"
230 \&  );
231 \&  $instance2\->does(\*(AqTrait\*(Aq)          # true
232 \&  $instance2\->does(\*(AqAnother::Trait\*(Aq) # false
233 .Ve
234 .SH "AUTHOR"
235 .IX Header "AUTHOR"
236 Jonathan Rockway \f(CW\*(C`<jrockway@cpan.org>\*(C'\fR
237 .PP
238 Stevan Little \f(CW\*(C`<stevan.little@iinteractive.com>\*(C'\fR
239 .SH "COPYRIGHT AND LICENSE"
240 .IX Header "COPYRIGHT AND LICENSE"
241 Copyright 2008 Infinity Interactive, Inc.
242 .PP
243 <http://www.iinteractive.com>
244 .PP
245 This library is free software; you can redistribute it and/or modify
246 it under the same terms as Perl itself.