Add built local::lib
[catagits/Gitalist.git] / local-lib5 / man / man3 / MooseX::Types::VariantTable.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::Types::VariantTable 3"
127 .TH MooseX::Types::VariantTable 3 "2010-01-05" "perl v5.8.8" "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::Types::VariantTable \- Type constraint based variant table
134 .SH "SYNOPSIS"
135 .IX Header "SYNOPSIS"
136 .Vb 2
137 \&    # see also MooseX::Types::VariantTable::Declare for a way to
138 \&    # declare variant table based methods
139 \&
140 \&        use MooseX::Types::VariantTable;
141 \&
142 \&    my $dispatch_table = MooseX::Types::VariantTable\->new(
143 \&        variants => [
144 \&            { type => "Foo", value => \e&foo_handler },
145 \&            { type => "Bar", value => \e&bar_handler },
146 \&            { type => "Item", value => \e&fallback },
147 \&        ],
148 \&    );
149 \&
150 \&    # look up the correct handler for $thingy based on the type constraints it passes
151 \&    my $entry = $dispatch_table\->find_variant($thingy);
152 \&
153 \&    # or use the \*(Aqdispatch\*(Aq convenience method if the entries are code refs
154 \&    $dispatch_table\->dispatch( $thingy, @args );
155 .Ve
156 .SH "DESCRIPTION"
157 .IX Header "DESCRIPTION"
158 This object implements a simple dispatch table based on Moose type constraints.
159 .PP
160 Subtypes will be checked before their parents, meaning that the order of the
161 declaration does not matter.
162 .PP
163 This object is used internally by Moose::Meta::Method::VariantTable and
164 MooseX::Types::VariantTable::Declare to provide primitive multi
165 sub support.
166 .SH "ATTRIBUTES"
167 .IX Header "ATTRIBUTES"
168 .SS "ambigious_match_callback"
169 .IX Subsection "ambigious_match_callback"
170 A code reference that'll be executed when find_variant found more than one
171 matching variant for a value. It defaults to something that simply croaks with
172 an error message like this:
173 .PP
174 .Vb 1
175 \&  Ambiguous match %s
176 .Ve
177 .PP
178 where \f(CW%s\fR contains a list of stringified types that matched.
179 .SH "METHODS"
180 .IX Header "METHODS"
181 .IP "new" 4
182 .IX Item "new"
183 .PD 0
184 .ie n .IP "add_variant $type, $value" 4
185 .el .IP "add_variant \f(CW$type\fR, \f(CW$value\fR" 4
186 .IX Item "add_variant $type, $value"
187 .PD
188 Registers \f(CW$type\fR, such that \f(CW$value\fR will be returned by \f(CW\*(C`find_variant\*(C'\fR for
189 items passing \f(CW$type\fR.
190 .Sp
191 Subtyping is respected in the table.
192 .ie n .IP "find_variant $value" 4
193 .el .IP "find_variant \f(CW$value\fR" 4
194 .IX Item "find_variant $value"
195 Returns the registered value for the most specific type that \f(CW$value\fR passes.
196 .ie n .IP "dispatch $value, @args" 4
197 .el .IP "dispatch \f(CW$value\fR, \f(CW@args\fR" 4
198 .IX Item "dispatch $value, @args"
199 A convenience method for when the registered values are code references.
200 .Sp
201 Calls \f(CW\*(C`find_variant\*(C'\fR and if the result is a code reference, it will \f(CW\*(C`goto\*(C'\fR
202 this code reference with the value and any additional arguments.
203 .ie n .IP "has_type $type" 4
204 .el .IP "has_type \f(CW$type\fR" 4
205 .IX Item "has_type $type"
206 Returns true if an entry for \f(CW$type\fR is registered.
207 .ie n .IP "has_parent $type" 4
208 .el .IP "has_parent \f(CW$type\fR" 4
209 .IX Item "has_parent $type"
210 Returns true if a parent type of \f(CW$type\fR is registered.
211 .SH "TODO"
212 .IX Header "TODO"
213 The meta method composes in multiple inheritence but not yet with roles due to
214 extensibility issues with the role application code.
215 .PP
216 When Moose::Meta::Role can pluggably merge methods variant table methods can
217 gain role composition.
218 .SH "AUTHOR"
219 .IX Header "AUTHOR"
220 Yuval Kogman <nothingmuch@woobling.org>
221 .PP
222 Florian Ragwitz <rafl@debian.org>
223 .SH "COPYRIGHT"
224 .IX Header "COPYRIGHT"
225 .Vb 3
226 \&        Copyright (c) 2008 Yuval Kogman. All rights reserved
227 \&        This program is free software; you can redistribute
228 \&        it and/or modify it under the same terms as Perl itself.
229 .Ve