File Coverage

blib/lib/Sub/HandlesVia/Handler.pm.mite.pm
Criterion Covered Total %
statement 428 615 69.5
branch 213 480 44.3
condition 70 243 28.8
subroutine 40 40 100.0
pod 5 8 62.5
total 756 1386 54.5


line stmt bran cond sub pod time code
1             {
2              
3             package Sub::HandlesVia::Handler;
4 96     96   710 use strict;
  96         287  
  96         3023  
5 96     96   591 use warnings;
  96         269  
  96         2926  
6 96     96   523 no warnings qw( once void );
  96         356  
  96         13975  
7              
8             our $USES_MITE = "Mite::Class";
9             our $MITE_SHIM = "Sub::HandlesVia::Mite";
10             our $MITE_VERSION = "0.012000";
11              
12             # Mite keywords
13             BEGIN {
14 96     96   555 my ( $SHIM, $CALLER ) =
15             ( "Sub::HandlesVia::Mite", "Sub::HandlesVia::Handler" );
16             (
17             *after, *around, *before, *extends, *field,
18             *has, *param, *signature_for, *with
19             )
20 96         397 = do {
21              
22             package Sub::HandlesVia::Mite;
23 96     96   825 no warnings 'redefine';
  96         574  
  96         23121  
24             (
25 0         0 sub { $SHIM->HANDLE_after( $CALLER, "class", @_ ) },
26 0         0 sub { $SHIM->HANDLE_around( $CALLER, "class", @_ ) },
27 0         0 sub { $SHIM->HANDLE_before( $CALLER, "class", @_ ) },
28             sub { },
29 0         0 sub { $SHIM->HANDLE_has( $CALLER, field => @_ ) },
30 1536         4275 sub { $SHIM->HANDLE_has( $CALLER, has => @_ ) },
31 0         0 sub { $SHIM->HANDLE_has( $CALLER, param => @_ ) },
32 0         0 sub { $SHIM->HANDLE_signature_for( $CALLER, "class", @_ ) },
33 0         0 sub { $SHIM->HANDLE_with( $CALLER, @_ ) },
34 96         20456 );
35             };
36             }
37              
38             # Mite imports
39             BEGIN {
40 96     96   991 require Scalar::Util;
41 96         1137 *STRICT = \&Sub::HandlesVia::Mite::STRICT;
42 96         757 *bare = \&Sub::HandlesVia::Mite::bare;
43 96         371 *blessed = \&Scalar::Util::blessed;
44 96         304 *carp = \&Sub::HandlesVia::Mite::carp;
45 96         281 *confess = \&Sub::HandlesVia::Mite::confess;
46 96         352 *croak = \&Sub::HandlesVia::Mite::croak;
47 96         255 *false = \&Sub::HandlesVia::Mite::false;
48 96         264 *guard = \&Sub::HandlesVia::Mite::guard;
49 96         299 *lazy = \&Sub::HandlesVia::Mite::lazy;
50 96         286 *lock = \&Sub::HandlesVia::Mite::lock;
51 96         229 *ro = \&Sub::HandlesVia::Mite::ro;
52 96         238 *rw = \&Sub::HandlesVia::Mite::rw;
53 96         302 *rwp = \&Sub::HandlesVia::Mite::rwp;
54 96         209 *true = \&Sub::HandlesVia::Mite::true;
55 96         3568 *unlock = \&Sub::HandlesVia::Mite::unlock;
56             }
57              
58             # Gather metadata for constructor and destructor
59             sub __META__ {
60 96     96   674 no strict 'refs';
  96         248  
  96         222279  
61 97     97   630 my $class = shift;
62 97   33     1209 $class = ref($class) || $class;
63 97         900 my $linear_isa = mro::get_linear_isa($class);
64             return {
65             BUILD => [
66 196 100       1056 map { ( *{$_}{CODE} ) ? ( *{$_}{CODE} ) : () }
  196         3078  
  1         4  
67 196         1421 map { "$_\::BUILD" } reverse @$linear_isa
68             ],
69             DEMOLISH => [
70 196 50       750 map { ( *{$_}{CODE} ) ? ( *{$_}{CODE} ) : () }
  196         3996  
  0         0  
71 97         675 map { "$_\::DEMOLISH" } @$linear_isa
  196         990  
72             ],
73             HAS_BUILDARGS => $class->can('BUILDARGS'),
74             HAS_FOREIGNBUILDARGS => $class->can('FOREIGNBUILDARGS'),
75             };
76             }
77              
78             # Standard Moose/Moo-style constructor
79             sub new {
80 5821 50   5821 1 15333 my $class = ref( $_[0] ) ? ref(shift) : shift;
81 5821   66     16906 my $meta = ( $Mite::META{$class} ||= $class->__META__ );
82 5821         13890 my $self = bless {}, $class;
83             my $args =
84             $meta->{HAS_BUILDARGS}
85             ? $class->BUILDARGS(@_)
86 5821 50       35770 : { ( @_ == 1 ) ? %{ $_[0] } : @_ };
  0 50       0  
87 5821         12133 my $no_build = delete $args->{__no_BUILD__};
88              
89             # Attribute name (type: Str)
90             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 12
91 5821 50       14603 if ( exists $args->{"name"} ) {
92 5821 50       9696 do {
93              
94             package Sub::HandlesVia::Mite;
95 5821 50       14882 defined( $args->{"name"} ) and do {
96             ref( \$args->{"name"} ) eq 'SCALAR'
97 5821 50       28748 or ref( \( my $val = $args->{"name"} ) ) eq 'SCALAR';
98             }
99             }
100             or croak "Type check failed in constructor: %s should be %s",
101             "name", "Str";
102 5821         15988 $self->{"name"} = $args->{"name"};
103             }
104              
105             # Attribute template (type: Str)
106             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 17
107 5821 50       12821 if ( exists $args->{"template"} ) {
108 5821 50       9026 do {
109              
110             package Sub::HandlesVia::Mite;
111 5821 50       14425 defined( $args->{"template"} ) and do {
112             ref( \$args->{"template"} ) eq 'SCALAR'
113 5821 50       23345 or ref( \( my $val = $args->{"template"} ) ) eq 'SCALAR';
114             }
115             }
116             or croak "Type check failed in constructor: %s should be %s",
117             "template", "Str";
118 5821         12931 $self->{"template"} = $args->{"template"};
119             }
120              
121             # Attribute lvalue_template (type: Str)
122             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 22
123 5821 100       13704 if ( exists $args->{"lvalue_template"} ) {
124 2476 50       3870 do {
125              
126             package Sub::HandlesVia::Mite;
127 2476 50       5875 defined( $args->{"lvalue_template"} ) and do {
128             ref( \$args->{"lvalue_template"} ) eq 'SCALAR'
129 2476 50       10094 or ref( \( my $val = $args->{"lvalue_template"} ) ) eq
130             'SCALAR';
131             }
132             }
133             or croak "Type check failed in constructor: %s should be %s",
134             "lvalue_template", "Str";
135 2476         5443 $self->{"lvalue_template"} = $args->{"lvalue_template"};
136             }
137              
138             # Attribute args (type: Int|Undef)
139             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 27
140 5821         8718 do {
141 5821 100       13360 my $value = exists( $args->{"args"} ) ? $args->{"args"} : undef;
142 5821 50       8415 do {
143              
144             package Sub::HandlesVia::Mite;
145             (
146             (
147 5821 100       8354 do {
148 5821         9016 my $tmp = $value;
149 5821 100 66     44728 defined($tmp)
150             and !ref($tmp)
151             and $tmp =~ /\A-?[0-9]+\z/;
152             }
153             )
154             or ( !defined($value) )
155             );
156             }
157             or croak "Type check failed in constructor: %s should be %s",
158             "args", "Int|Undef";
159 5821         13871 $self->{"args"} = $value;
160             };
161              
162             # Attribute min_args (type: Int|Undef)
163             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 37
164 5821 100       12819 if ( exists $args->{"min_args"} ) {
165 2565 50       3882 do {
166              
167             package Sub::HandlesVia::Mite;
168             (
169             (
170             do {
171 2565         4312 my $tmp = $args->{"min_args"};
172 2565 100 66     20939 defined($tmp)
173             and !ref($tmp)
174             and $tmp =~ /\A-?[0-9]+\z/;
175             }
176             )
177 2565 100       3667 or do {
178              
179             package Sub::HandlesVia::Mite;
180 84         357 !defined( $args->{"min_args"} );
181             }
182             );
183             }
184             or croak "Type check failed in constructor: %s should be %s",
185             "min_args", "Int|Undef";
186 2565         6151 $self->{"min_args"} = $args->{"min_args"};
187             }
188              
189             # Attribute max_args (type: Int|Undef)
190             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 37
191 5821 100       12710 if ( exists $args->{"max_args"} ) {
192 2233 50       3400 do {
193              
194             package Sub::HandlesVia::Mite;
195             (
196             (
197             do {
198 2233         3736 my $tmp = $args->{"max_args"};
199 2233 100 66     14463 defined($tmp)
200             and !ref($tmp)
201             and $tmp =~ /\A-?[0-9]+\z/;
202             }
203             )
204 2233 100       3216 or do {
205              
206             package Sub::HandlesVia::Mite;
207 213         731 !defined( $args->{"max_args"} );
208             }
209             );
210             }
211             or croak "Type check failed in constructor: %s should be %s",
212             "max_args", "Int|Undef";
213 2233         5036 $self->{"max_args"} = $args->{"max_args"};
214             }
215              
216             # Attribute signature (type: ArrayRef|Undef)
217             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 43
218 5821 100       12512 if ( exists $args->{"signature"} ) {
219 4032 50       5858 do {
220              
221             package Sub::HandlesVia::Mite;
222             (
223             do {
224              
225             package Sub::HandlesVia::Mite;
226 4032         13442 ref( $args->{"signature"} ) eq 'ARRAY';
227             }
228 4032 100       5476 or do {
229              
230             package Sub::HandlesVia::Mite;
231 213         728 !defined( $args->{"signature"} );
232             }
233             );
234             }
235             or croak "Type check failed in constructor: %s should be %s",
236             "signature", "ArrayRef|Undef";
237 4032         8378 $self->{"signature"} = $args->{"signature"};
238             }
239              
240             # Attribute usage (type: Str)
241             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 48
242 5821 100       12410 if ( exists $args->{"usage"} ) {
243 3235 50       4786 do {
244              
245             package Sub::HandlesVia::Mite;
246 3235 50       7845 defined( $args->{"usage"} ) and do {
247             ref( \$args->{"usage"} ) eq 'SCALAR'
248 3235 50       13231 or ref( \( my $val = $args->{"usage"} ) ) eq 'SCALAR';
249             }
250             }
251             or croak "Type check failed in constructor: %s should be %s",
252             "usage", "Str";
253 3235         7453 $self->{"usage"} = $args->{"usage"};
254             }
255              
256             # Attribute curried (type: ArrayRef)
257             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 54
258 5821 100       12583 if ( exists $args->{"curried"} ) {
259 1402 50       2429 do {
260              
261             package Sub::HandlesVia::Mite;
262 1402         3931 ref( $args->{"curried"} ) eq 'ARRAY';
263             }
264             or croak "Type check failed in constructor: %s should be %s",
265             "curried", "ArrayRef";
266 1402         3650 $self->{"curried"} = $args->{"curried"};
267             }
268              
269             # Attribute is_chainable (type: Bool)
270             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 59
271 5821 100       12299 if ( exists $args->{"is_chainable"} ) {
272 20         50 do {
273 20         69 my $coerced_value = do {
274 20         68 my $to_coerce = $args->{"is_chainable"};
275             (
276             (
277             !ref $to_coerce
278             and (!defined $to_coerce
279             or $to_coerce eq q()
280             or $to_coerce eq '0'
281             or $to_coerce eq '1' )
282             )
283             ) ? $to_coerce
284             : ( ( !!1 ) )
285 20 50 33     353 ? scalar( do { local $_ = $to_coerce; !!$_ } )
  0         0  
  0         0  
286             : $to_coerce;
287             };
288             (
289 20 50 33     308 !ref $coerced_value
      33        
290             and (!defined $coerced_value
291             or $coerced_value eq q()
292             or $coerced_value eq '0'
293             or $coerced_value eq '1' )
294             )
295             or croak "Type check failed in constructor: %s should be %s",
296             "is_chainable", "Bool";
297 20         74 $self->{"is_chainable"} = $coerced_value;
298             };
299             }
300              
301             # Attribute no_validation_needed (type: Bool)
302             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 59
303 5821 50       11764 if ( exists $args->{"no_validation_needed"} ) {
304 0         0 do {
305 0         0 my $coerced_value = do {
306 0         0 my $to_coerce = $args->{"no_validation_needed"};
307             (
308             (
309             !ref $to_coerce
310             and (!defined $to_coerce
311             or $to_coerce eq q()
312             or $to_coerce eq '0'
313             or $to_coerce eq '1' )
314             )
315             ) ? $to_coerce
316             : ( ( !!1 ) )
317 0 0 0     0 ? scalar( do { local $_ = $to_coerce; !!$_ } )
  0         0  
  0         0  
318             : $to_coerce;
319             };
320             (
321 0 0 0     0 !ref $coerced_value
      0        
322             and (!defined $coerced_value
323             or $coerced_value eq q()
324             or $coerced_value eq '0'
325             or $coerced_value eq '1' )
326             )
327             or croak "Type check failed in constructor: %s should be %s",
328             "no_validation_needed", "Bool";
329 0         0 $self->{"no_validation_needed"} = $coerced_value;
330             };
331             }
332              
333             # Attribute is_mutator (type: Bool)
334             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 70
335 5821 100       11733 if ( exists $args->{"is_mutator"} ) {
336 3         8 do {
337 3         4 my $coerced_value = do {
338 3         8 my $to_coerce = $args->{"is_mutator"};
339             (
340             (
341             !ref $to_coerce
342             and (!defined $to_coerce
343             or $to_coerce eq q()
344             or $to_coerce eq '0'
345             or $to_coerce eq '1' )
346             )
347             ) ? $to_coerce
348             : ( ( !!1 ) )
349 3 50 33     41 ? scalar( do { local $_ = $to_coerce; !!$_ } )
  0         0  
  0         0  
350             : $to_coerce;
351             };
352             (
353 3 50 33     25 !ref $coerced_value
      33        
354             and (!defined $coerced_value
355             or $coerced_value eq q()
356             or $coerced_value eq '0'
357             or $coerced_value eq '1' )
358             )
359             or croak "Type check failed in constructor: %s should be %s",
360             "is_mutator", "Bool";
361 3         6 $self->{"is_mutator"} = $coerced_value;
362             };
363             }
364              
365             # Attribute allow_getter_shortcuts (type: Bool)
366             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 72
367 5821         8224 do {
368             my $value =
369             exists( $args->{"allow_getter_shortcuts"} )
370 5821 100       13096 ? $args->{"allow_getter_shortcuts"}
371             : true;
372 5821         8439 do {
373 5821         7946 my $coerced_value = do {
374 5821         8912 my $to_coerce = $value;
375             (
376             (
377             !ref $to_coerce
378             and (!defined $to_coerce
379             or $to_coerce eq q()
380             or $to_coerce eq '0'
381             or $to_coerce eq '1' )
382             )
383             ) ? $to_coerce
384             : ( ( !!1 ) )
385 5821 50 33     42534 ? scalar( do { local $_ = $to_coerce; !!$_ } )
  0         0  
  0         0  
386             : $to_coerce;
387             };
388             (
389 5821 50 66     38241 !ref $coerced_value
      66        
390             and (!defined $coerced_value
391             or $coerced_value eq q()
392             or $coerced_value eq '0'
393             or $coerced_value eq '1' )
394             )
395             or croak "Type check failed in constructor: %s should be %s",
396             "allow_getter_shortcuts", "Bool";
397 5821         14471 $self->{"allow_getter_shortcuts"} = $coerced_value;
398             };
399             };
400              
401             # Attribute prefer_shift_self (type: Bool)
402             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 79
403 5821         8682 do {
404             my $value =
405             exists( $args->{"prefer_shift_self"} )
406 5821 100       12338 ? $args->{"prefer_shift_self"}
407             : false;
408 5821         8282 do {
409 5821         8157 my $coerced_value = do {
410 5821         8826 my $to_coerce = $value;
411             (
412             (
413             !ref $to_coerce
414             and (!defined $to_coerce
415             or $to_coerce eq q()
416             or $to_coerce eq '0'
417             or $to_coerce eq '1' )
418             )
419             ) ? $to_coerce
420             : ( ( !!1 ) )
421 5821 50 33     34517 ? scalar( do { local $_ = $to_coerce; !!$_ } )
  0         0  
  0         0  
422             : $to_coerce;
423             };
424             (
425 5821 50 66     28204 !ref $coerced_value
      66        
426             and (!defined $coerced_value
427             or $coerced_value eq q()
428             or $coerced_value eq '0'
429             or $coerced_value eq '1' )
430             )
431             or croak "Type check failed in constructor: %s should be %s",
432             "prefer_shift_self", "Bool";
433 5821         13603 $self->{"prefer_shift_self"} = $coerced_value;
434             };
435             };
436              
437             # Attribute additional_validation (type: CodeRef|Str|Undef)
438             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 86
439 5821 100       12635 if ( exists $args->{"additional_validation"} ) {
440 2002 50       2993 do {
441              
442             package Sub::HandlesVia::Mite;
443             (
444             do {
445              
446             package Sub::HandlesVia::Mite;
447 2002         7462 ref( $args->{"additional_validation"} ) eq 'CODE';
448             }
449             or do {
450              
451             package Sub::HandlesVia::Mite;
452 673 50       1996 defined( $args->{"additional_validation"} ) and do {
453             ref( \$args->{"additional_validation"} ) eq 'SCALAR'
454             or ref(
455 673 50       4222 \( my $val = $args->{"additional_validation"} )
456             ) eq 'SCALAR';
457             }
458             }
459 2002 50 66     2933 or do {
460              
461             package Sub::HandlesVia::Mite;
462 0         0 !defined( $args->{"additional_validation"} );
463             }
464             );
465             }
466             or croak "Type check failed in constructor: %s should be %s",
467             "additional_validation", "CodeRef|Str|Undef";
468 2002         4491 $self->{"additional_validation"} = $args->{"additional_validation"};
469             }
470              
471             # Attribute default_for_reset (type: CodeRef)
472             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 91
473 5821 100       12103 if ( exists $args->{"default_for_reset"} ) {
474 60 50       145 do {
475              
476             package Sub::HandlesVia::Mite;
477 60         304 ref( $args->{"default_for_reset"} ) eq 'CODE';
478             }
479             or croak "Type check failed in constructor: %s should be %s",
480             "default_for_reset", "CodeRef";
481 60         154 $self->{"default_for_reset"} = $args->{"default_for_reset"};
482             }
483              
484             # Attribute documentation (type: Str)
485             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 96
486 5821 100       11865 if ( exists $args->{"documentation"} ) {
487 5818 50       8667 do {
488              
489             package Sub::HandlesVia::Mite;
490 5818 50       13209 defined( $args->{"documentation"} ) and do {
491             ref( \$args->{"documentation"} ) eq 'SCALAR'
492 5818 50       23474 or ref( \( my $val = $args->{"documentation"} ) ) eq
493             'SCALAR';
494             }
495             }
496             or croak "Type check failed in constructor: %s should be %s",
497             "documentation", "Str";
498 5818         13946 $self->{"documentation"} = $args->{"documentation"};
499             }
500              
501             # Attribute _examples (type: CodeRef)
502             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 101
503 5821 100       12123 if ( exists $args->{"_examples"} ) {
504 3866 50       5517 do {
505              
506             package Sub::HandlesVia::Mite;
507 3866         10415 ref( $args->{"_examples"} ) eq 'CODE';
508             }
509             or croak "Type check failed in constructor: %s should be %s",
510             "_examples", "CodeRef";
511 3866         7873 $self->{"_examples"} = $args->{"_examples"};
512             }
513              
514             # Call BUILD methods
515 5821 50 33     12755 $self->BUILDALL($args) if ( !$no_build and @{ $meta->{BUILD} || [] } );
  5821 50       21791  
516              
517             # Unrecognized parameters
518             my @unknown = grep not(
519             /\A(?:_examples|a(?:dditional_validation|llow_getter_shortcuts|rgs)|curried|d(?:efault_for_reset|ocumentation)|is_(?:chainable|mutator)|lvalue_template|m(?:ax_args|in_args)|n(?:ame|o_validation_needed)|prefer_shift_self|signature|template|usage)\z/
520 5821         9530 ), keys %{$args};
  5821         70497  
521             @unknown
522 5821 50       17936 and croak(
523             "Unexpected keys in constructor: " . join( q[, ], sort @unknown ) );
524              
525 5821         45924 return $self;
526             }
527              
528             # Used by constructor to call BUILD methods
529             sub BUILDALL {
530 2     2 0 4 my $class = ref( $_[0] );
531 2   33     7 my $meta = ( $Mite::META{$class} ||= $class->__META__ );
532 2 50       4 $_->(@_) for @{ $meta->{BUILD} || [] };
  2         13  
533             }
534              
535             # Destructor should call DEMOLISH methods
536             sub DESTROY {
537 5824     5824   74055 my $self = shift;
538 5824   33     17047 my $class = ref($self) || $self;
539 5824   33     16976 my $meta = ( $Mite::META{$class} ||= $class->__META__ );
540 5824 50       22003 my $in_global_destruction =
541             defined ${^GLOBAL_PHASE}
542             ? ${^GLOBAL_PHASE} eq 'DESTRUCT'
543             : Devel::GlobalDestruction::in_global_destruction();
544 5824 50       9680 for my $demolisher ( @{ $meta->{DEMOLISH} || [] } ) {
  5824         19722  
545 0         0 my $e = do {
546 0         0 local ( $?, $@ );
547 0         0 eval { $demolisher->( $self, $in_global_destruction ) };
  0         0  
548 0         0 $@;
549             };
550 96     96   897 no warnings 'misc'; # avoid (in cleanup) warnings
  96         263  
  96         188587  
551 0 0       0 die $e if $e; # rethrow
552             }
553 5824         57381 return;
554             }
555              
556             my $__XS = !$ENV{PERL_ONLY}
557             && eval { require Class::XSAccessor; Class::XSAccessor->VERSION("1.19") };
558              
559             # Accessors for _examples
560             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 101
561             if ($__XS) {
562             Class::XSAccessor->import(
563             chained => 1,
564             "getters" => { "_examples" => "_examples" },
565             );
566             }
567             else {
568             *_examples = sub {
569             @_ == 1 or croak('Reader "_examples" usage: $self->_examples()');
570             $_[0]{"_examples"};
571             };
572             }
573              
574             # Accessors for additional_validation
575             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 86
576             if ($__XS) {
577             Class::XSAccessor->import(
578             chained => 1,
579             "getters" => { "additional_validation" => "additional_validation" },
580             );
581             }
582             else {
583             *additional_validation = sub {
584             @_ == 1
585             or croak(
586             'Reader "additional_validation" usage: $self->additional_validation()'
587             );
588             $_[0]{"additional_validation"};
589             };
590             }
591              
592             # Accessors for allow_getter_shortcuts
593             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 72
594             if ($__XS) {
595             Class::XSAccessor->import(
596             chained => 1,
597             "getters" =>
598             { "allow_getter_shortcuts" => "allow_getter_shortcuts" },
599             );
600             }
601             else {
602             *allow_getter_shortcuts = sub {
603             @_ == 1
604             or croak(
605             'Reader "allow_getter_shortcuts" usage: $self->allow_getter_shortcuts()'
606             );
607             $_[0]{"allow_getter_shortcuts"};
608             };
609             }
610              
611             # Accessors for args
612             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 27
613             if ($__XS) {
614             Class::XSAccessor->import(
615             chained => 1,
616             "getters" => { "args" => "args" },
617             );
618             }
619             else {
620             *args = sub {
621             @_ == 1 or croak('Reader "args" usage: $self->args()');
622             $_[0]{"args"};
623             };
624             }
625              
626             # Accessors for curried
627             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 54
628             if ($__XS) {
629             Class::XSAccessor->import(
630             chained => 1,
631             "getters" => { "curried" => "curried" },
632             );
633             }
634             else {
635             *curried = sub {
636             @_ == 1 or croak('Reader "curried" usage: $self->curried()');
637             $_[0]{"curried"};
638             };
639             }
640              
641             # Accessors for default_for_reset
642             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 91
643             if ($__XS) {
644             Class::XSAccessor->import(
645             chained => 1,
646             "getters" => { "default_for_reset" => "default_for_reset" },
647             );
648             }
649             else {
650             *default_for_reset = sub {
651             @_ == 1
652             or croak(
653             'Reader "default_for_reset" usage: $self->default_for_reset()');
654             $_[0]{"default_for_reset"};
655             };
656             }
657              
658             # Accessors for documentation
659             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 96
660             if ($__XS) {
661             Class::XSAccessor->import(
662             chained => 1,
663             "getters" => { "documentation" => "documentation" },
664             );
665             }
666             else {
667             *documentation = sub {
668             @_ == 1
669             or croak('Reader "documentation" usage: $self->documentation()');
670             $_[0]{"documentation"};
671             };
672             }
673              
674             # Accessors for is_chainable
675             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 59
676             if ($__XS) {
677             Class::XSAccessor->import(
678             chained => 1,
679             "getters" => { "is_chainable" => "is_chainable" },
680             );
681             }
682             else {
683             *is_chainable = sub {
684             @_ == 1
685             or croak('Reader "is_chainable" usage: $self->is_chainable()');
686             $_[0]{"is_chainable"};
687             };
688             }
689              
690             # Accessors for is_mutator
691             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 70
692             sub is_mutator {
693 4244 50   4244 1 10463 @_ == 1 or croak('Reader "is_mutator" usage: $self->is_mutator()');
694             (
695             exists( $_[0]{"is_mutator"} ) ? $_[0]{"is_mutator"} : (
696 4244 100       10875 $_[0]{"is_mutator"} = do {
697 4240         6445 my $default_value = do {
698 4240         11812 my $to_coerce =
699             $Sub::HandlesVia::Handler::__is_mutator_DEFAULT__->(
700             $_[0] );
701             (
702             (
703             !ref $to_coerce
704             and (!defined $to_coerce
705             or $to_coerce eq q()
706             or $to_coerce eq '0'
707             or $to_coerce eq '1' )
708             )
709             ) ? $to_coerce
710             : ( ( !!1 ) )
711 4240 50 33     32103 ? scalar( do { local $_ = $to_coerce; !!$_ } )
  0         0  
  0         0  
712             : $to_coerce;
713             };
714             (
715 4240 50 66     25115 !ref $default_value
      66        
716             and (!defined $default_value
717             or $default_value eq q()
718             or $default_value eq '0'
719             or $default_value eq '1' )
720             )
721             or croak( "Type check failed in default: %s should be %s",
722             "is_mutator", "Bool" );
723 4240         18150 $default_value;
724             }
725             )
726             );
727             }
728              
729             # Accessors for lvalue_template
730             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 22
731             if ($__XS) {
732             Class::XSAccessor->import(
733             chained => 1,
734             "getters" => { "lvalue_template" => "lvalue_template" },
735             );
736             }
737             else {
738             *lvalue_template = sub {
739             @_ == 1
740             or
741             croak('Reader "lvalue_template" usage: $self->lvalue_template()');
742             $_[0]{"lvalue_template"};
743             };
744             }
745              
746             # Accessors for max_args
747             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 37
748             sub max_args {
749 12563 50   12563 1 26229 @_ == 1 or croak('Reader "max_args" usage: $self->max_args()');
750             (
751             exists( $_[0]{"max_args"} ) ? $_[0]{"max_args"} : (
752 12563 100       45282 $_[0]{"max_args"} = do {
753 2438         6705 my $default_value = $_[0]->_build_max_args;
754 2438 50       3999 do {
755              
756             package Sub::HandlesVia::Mite;
757             (
758             (
759 2438 100       3590 do {
760 2438         3907 my $tmp = $default_value;
761 2438 100 66     18847 defined($tmp)
762             and !ref($tmp)
763             and $tmp =~ /\A-?[0-9]+\z/;
764             }
765             )
766             or ( !defined($default_value) )
767             );
768             }
769             or croak( "Type check failed in default: %s should be %s",
770             "max_args", "Int|Undef" );
771 2438         9712 $default_value;
772             }
773             )
774             );
775             }
776              
777             # Accessors for min_args
778             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 37
779             sub min_args {
780 6036 50   6036 1 13314 @_ == 1 or croak('Reader "min_args" usage: $self->min_args()');
781             (
782             exists( $_[0]{"min_args"} ) ? $_[0]{"min_args"} : (
783 6036 100       22319 $_[0]{"min_args"} = do {
784 2122         6312 my $default_value = $_[0]->_build_min_args;
785 2122 50       3635 do {
786              
787             package Sub::HandlesVia::Mite;
788             (
789             (
790 2122 100       3162 do {
791 2122         3543 my $tmp = $default_value;
792 2122 100 66     18842 defined($tmp)
793             and !ref($tmp)
794             and $tmp =~ /\A-?[0-9]+\z/;
795             }
796             )
797             or ( !defined($default_value) )
798             );
799             }
800             or croak( "Type check failed in default: %s should be %s",
801             "min_args", "Int|Undef" );
802 2122         10751 $default_value;
803             }
804             )
805             );
806             }
807              
808             # Accessors for name
809             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 12
810             if ($__XS) {
811             Class::XSAccessor->import(
812             chained => 1,
813             "getters" => { "name" => "name" },
814             );
815             }
816             else {
817             *name = sub {
818             @_ == 1 or croak('Reader "name" usage: $self->name()');
819             $_[0]{"name"};
820             };
821             }
822              
823             # Accessors for no_validation_needed
824             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 59
825             if ($__XS) {
826             Class::XSAccessor->import(
827             chained => 1,
828             "getters" => { "no_validation_needed" => "no_validation_needed" },
829             );
830             }
831             else {
832             *no_validation_needed = sub {
833             @_ == 1
834             or croak(
835             'Reader "no_validation_needed" usage: $self->no_validation_needed()'
836             );
837             $_[0]{"no_validation_needed"};
838             };
839             }
840              
841             # Accessors for prefer_shift_self
842             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 79
843             if ($__XS) {
844             Class::XSAccessor->import(
845             chained => 1,
846             "getters" => { "prefer_shift_self" => "prefer_shift_self" },
847             );
848             }
849             else {
850             *prefer_shift_self = sub {
851             @_ == 1
852             or croak(
853             'Reader "prefer_shift_self" usage: $self->prefer_shift_self()');
854             $_[0]{"prefer_shift_self"};
855             };
856             }
857              
858             # Accessors for signature
859             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 43
860             if ($__XS) {
861             Class::XSAccessor->import(
862             chained => 1,
863             "getters" => { "signature" => "signature" },
864             );
865             }
866             else {
867             *signature = sub {
868             @_ == 1 or croak('Reader "signature" usage: $self->signature()');
869             $_[0]{"signature"};
870             };
871             }
872              
873             # Accessors for template
874             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 17
875             if ($__XS) {
876             Class::XSAccessor->import(
877             chained => 1,
878             "getters" => { "template" => "template" },
879             );
880             }
881             else {
882             *template = sub {
883             @_ == 1 or croak('Reader "template" usage: $self->template()');
884             $_[0]{"template"};
885             };
886             }
887              
888             # Accessors for usage
889             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 48
890             sub usage {
891 2661 50   2661 1 6173 @_ == 1 or croak('Reader "usage" usage: $self->usage()');
892             (
893             exists( $_[0]{"usage"} ) ? $_[0]{"usage"} : (
894 2661 100       6592 $_[0]{"usage"} = do {
895 2292         6755 my $default_value = $_[0]->_build_usage;
896 2292 50       3805 do {
897              
898             package Sub::HandlesVia::Mite;
899 2292 50       5586 defined($default_value) and do {
900 2292 50       10061 ref( \$default_value ) eq 'SCALAR'
901             or ref( \( my $val = $default_value ) ) eq
902             'SCALAR';
903             }
904             }
905             or croak( "Type check failed in default: %s should be %s",
906             "usage", "Str" );
907 2292         9087 $default_value;
908             }
909             )
910             );
911             }
912              
913             # See UNIVERSAL
914             sub DOES {
915 6912     6912 0 13744 my ( $self, $role ) = @_;
916 6912         9181 our %DOES;
917 6912 50       12831 return $DOES{$role} if exists $DOES{$role};
918 6912 50       13605 return 1 if $role eq __PACKAGE__;
919 6912 50 33     16138 if ( $INC{'Moose/Util.pm'}
      66        
920             and my $meta = Moose::Util::find_meta( ref $self or $self ) )
921             {
922 0 0 0     0 $meta->can('does_role') and $meta->does_role($role) and return 1;
923             }
924 6912         43000 return $self->SUPER::DOES($role);
925             }
926              
927             # Alias for Moose/Moo-compatibility
928             sub does {
929 2304     2304 0 327434 shift->DOES(@_);
930             }
931              
932             1;
933             }
934             {
935              
936             package Sub::HandlesVia::Handler::Traditional;
937 96     96   910 use strict;
  96         275  
  96         3211  
938 96     96   2008 use warnings;
  96         301  
  96         4923  
939 96     96   696 no warnings qw( once void );
  96         294  
  96         13792  
940              
941             our $USES_MITE = "Mite::Class";
942             our $MITE_SHIM = "Sub::HandlesVia::Mite";
943             our $MITE_VERSION = "0.012000";
944              
945             # Mite keywords
946             BEGIN {
947 96     96   595 my ( $SHIM, $CALLER ) =
948             ( "Sub::HandlesVia::Mite", "Sub::HandlesVia::Handler::Traditional" );
949             (
950             *after, *around, *before, *extends, *field,
951             *has, *param, *signature_for, *with
952             )
953 96         1672 = do {
954              
955             package Sub::HandlesVia::Mite;
956 96     96   764 no warnings 'redefine';
  96         287  
  96         23694  
957             (
958 0         0 sub { $SHIM->HANDLE_after( $CALLER, "class", @_ ) },
959 0         0 sub { $SHIM->HANDLE_around( $CALLER, "class", @_ ) },
960 0         0 sub { $SHIM->HANDLE_before( $CALLER, "class", @_ ) },
961             sub { },
962 0         0 sub { $SHIM->HANDLE_has( $CALLER, field => @_ ) },
963 96         525 sub { $SHIM->HANDLE_has( $CALLER, has => @_ ) },
964 0         0 sub { $SHIM->HANDLE_has( $CALLER, param => @_ ) },
965 0         0 sub { $SHIM->HANDLE_signature_for( $CALLER, "class", @_ ) },
966 0         0 sub { $SHIM->HANDLE_with( $CALLER, @_ ) },
967 96         21388 );
968             };
969             }
970              
971             # Mite imports
972             BEGIN {
973 96     96   847 require Scalar::Util;
974 96         407 *STRICT = \&Sub::HandlesVia::Mite::STRICT;
975 96         289 *bare = \&Sub::HandlesVia::Mite::bare;
976 96         281 *blessed = \&Scalar::Util::blessed;
977 96         267 *carp = \&Sub::HandlesVia::Mite::carp;
978 96         319 *confess = \&Sub::HandlesVia::Mite::confess;
979 96         346 *croak = \&Sub::HandlesVia::Mite::croak;
980 96         217 *false = \&Sub::HandlesVia::Mite::false;
981 96         1620 *guard = \&Sub::HandlesVia::Mite::guard;
982 96         268 *lazy = \&Sub::HandlesVia::Mite::lazy;
983 96         221 *lock = \&Sub::HandlesVia::Mite::lock;
984 96         194 *ro = \&Sub::HandlesVia::Mite::ro;
985 96         205 *rw = \&Sub::HandlesVia::Mite::rw;
986 96         277 *rwp = \&Sub::HandlesVia::Mite::rwp;
987 96         267 *true = \&Sub::HandlesVia::Mite::true;
988 96         3827 *unlock = \&Sub::HandlesVia::Mite::unlock;
989             }
990              
991             BEGIN {
992              
993 96     96   730 use mro 'c3';
  96         272  
  96         2368  
994 96     96   4967 our @ISA;
995 96         219545 push @ISA, "Sub::HandlesVia::Handler";
996             }
997              
998             # Standard Moose/Moo-style constructor
999             sub new {
1000 1 50   1   8 my $class = ref( $_[0] ) ? ref(shift) : shift;
1001 1   33     18 my $meta = ( $Mite::META{$class} ||= $class->__META__ );
1002 1         6 my $self = bless {}, $class;
1003             my $args =
1004             $meta->{HAS_BUILDARGS}
1005             ? $class->BUILDARGS(@_)
1006 1 50       6 : { ( @_ == 1 ) ? %{ $_[0] } : @_ };
  0 50       0  
1007 1         4 my $no_build = delete $args->{__no_BUILD__};
1008              
1009             # Attribute template (type: Str)
1010             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 17
1011 1 50       5 if ( exists $args->{"template"} ) {
1012 0 0       0 do {
1013              
1014             package Sub::HandlesVia::Mite;
1015 0 0       0 defined( $args->{"template"} ) and do {
1016             ref( \$args->{"template"} ) eq 'SCALAR'
1017 0 0       0 or ref( \( my $val = $args->{"template"} ) ) eq 'SCALAR';
1018             }
1019             }
1020             or croak "Type check failed in constructor: %s should be %s",
1021             "template", "Str";
1022 0         0 $self->{"template"} = $args->{"template"};
1023             }
1024              
1025             # Attribute lvalue_template (type: Str)
1026             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 22
1027 1 50       8 if ( exists $args->{"lvalue_template"} ) {
1028 0 0       0 do {
1029              
1030             package Sub::HandlesVia::Mite;
1031 0 0       0 defined( $args->{"lvalue_template"} ) and do {
1032             ref( \$args->{"lvalue_template"} ) eq 'SCALAR'
1033 0 0       0 or ref( \( my $val = $args->{"lvalue_template"} ) ) eq
1034             'SCALAR';
1035             }
1036             }
1037             or croak "Type check failed in constructor: %s should be %s",
1038             "lvalue_template", "Str";
1039 0         0 $self->{"lvalue_template"} = $args->{"lvalue_template"};
1040             }
1041              
1042             # Attribute args (type: Int|Undef)
1043             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 27
1044 1         3 do {
1045 1 50       5 my $value = exists( $args->{"args"} ) ? $args->{"args"} : undef;
1046 1 50       2 do {
1047              
1048             package Sub::HandlesVia::Mite;
1049             (
1050             (
1051 1 50       3 do {
1052 1         1 my $tmp = $value;
1053 1 50 33     12 defined($tmp)
1054             and !ref($tmp)
1055             and $tmp =~ /\A-?[0-9]+\z/;
1056             }
1057             )
1058             or ( !defined($value) )
1059             );
1060             }
1061             or croak "Type check failed in constructor: %s should be %s",
1062             "args", "Int|Undef";
1063 1         10 $self->{"args"} = $value;
1064             };
1065              
1066             # Attribute min_args (type: Int|Undef)
1067             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 37
1068 1 50       15 if ( exists $args->{"min_args"} ) {
1069 0 0       0 do {
1070              
1071             package Sub::HandlesVia::Mite;
1072             (
1073             (
1074             do {
1075 0         0 my $tmp = $args->{"min_args"};
1076 0 0 0     0 defined($tmp)
1077             and !ref($tmp)
1078             and $tmp =~ /\A-?[0-9]+\z/;
1079             }
1080             )
1081 0 0       0 or do {
1082              
1083             package Sub::HandlesVia::Mite;
1084 0         0 !defined( $args->{"min_args"} );
1085             }
1086             );
1087             }
1088             or croak "Type check failed in constructor: %s should be %s",
1089             "min_args", "Int|Undef";
1090 0         0 $self->{"min_args"} = $args->{"min_args"};
1091             }
1092              
1093             # Attribute max_args (type: Int|Undef)
1094             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 37
1095 1 50       21 if ( exists $args->{"max_args"} ) {
1096 0 0       0 do {
1097              
1098             package Sub::HandlesVia::Mite;
1099             (
1100             (
1101             do {
1102 0         0 my $tmp = $args->{"max_args"};
1103 0 0 0     0 defined($tmp)
1104             and !ref($tmp)
1105             and $tmp =~ /\A-?[0-9]+\z/;
1106             }
1107             )
1108 0 0       0 or do {
1109              
1110             package Sub::HandlesVia::Mite;
1111 0         0 !defined( $args->{"max_args"} );
1112             }
1113             );
1114             }
1115             or croak "Type check failed in constructor: %s should be %s",
1116             "max_args", "Int|Undef";
1117 0         0 $self->{"max_args"} = $args->{"max_args"};
1118             }
1119              
1120             # Attribute signature (type: ArrayRef|Undef)
1121             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 43
1122 1 50       6 if ( exists $args->{"signature"} ) {
1123 0 0       0 do {
1124              
1125             package Sub::HandlesVia::Mite;
1126             (
1127             do {
1128              
1129             package Sub::HandlesVia::Mite;
1130 0         0 ref( $args->{"signature"} ) eq 'ARRAY';
1131             }
1132 0 0       0 or do {
1133              
1134             package Sub::HandlesVia::Mite;
1135 0         0 !defined( $args->{"signature"} );
1136             }
1137             );
1138             }
1139             or croak "Type check failed in constructor: %s should be %s",
1140             "signature", "ArrayRef|Undef";
1141 0         0 $self->{"signature"} = $args->{"signature"};
1142             }
1143              
1144             # Attribute usage (type: Str)
1145             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 48
1146 1 50       25 if ( exists $args->{"usage"} ) {
1147 0 0       0 do {
1148              
1149             package Sub::HandlesVia::Mite;
1150 0 0       0 defined( $args->{"usage"} ) and do {
1151             ref( \$args->{"usage"} ) eq 'SCALAR'
1152 0 0       0 or ref( \( my $val = $args->{"usage"} ) ) eq 'SCALAR';
1153             }
1154             }
1155             or croak "Type check failed in constructor: %s should be %s",
1156             "usage", "Str";
1157 0         0 $self->{"usage"} = $args->{"usage"};
1158             }
1159              
1160             # Attribute curried (type: ArrayRef)
1161             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 54
1162 1 50       12 if ( exists $args->{"curried"} ) {
1163 0 0       0 do {
1164              
1165             package Sub::HandlesVia::Mite;
1166 0         0 ref( $args->{"curried"} ) eq 'ARRAY';
1167             }
1168             or croak "Type check failed in constructor: %s should be %s",
1169             "curried", "ArrayRef";
1170 0         0 $self->{"curried"} = $args->{"curried"};
1171             }
1172              
1173             # Attribute is_chainable (type: Bool)
1174             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 59
1175 1 50       4 if ( exists $args->{"is_chainable"} ) {
1176 0         0 do {
1177 0         0 my $coerced_value = do {
1178 0         0 my $to_coerce = $args->{"is_chainable"};
1179             (
1180             (
1181             !ref $to_coerce
1182             and (!defined $to_coerce
1183             or $to_coerce eq q()
1184             or $to_coerce eq '0'
1185             or $to_coerce eq '1' )
1186             )
1187             ) ? $to_coerce
1188             : ( ( !!1 ) )
1189 0 0 0     0 ? scalar( do { local $_ = $to_coerce; !!$_ } )
  0         0  
  0         0  
1190             : $to_coerce;
1191             };
1192             (
1193 0 0 0     0 !ref $coerced_value
      0        
1194             and (!defined $coerced_value
1195             or $coerced_value eq q()
1196             or $coerced_value eq '0'
1197             or $coerced_value eq '1' )
1198             )
1199             or croak "Type check failed in constructor: %s should be %s",
1200             "is_chainable", "Bool";
1201 0         0 $self->{"is_chainable"} = $coerced_value;
1202             };
1203             }
1204              
1205             # Attribute no_validation_needed (type: Bool)
1206             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 59
1207 1 50       4 if ( exists $args->{"no_validation_needed"} ) {
1208 0         0 do {
1209 0         0 my $coerced_value = do {
1210 0         0 my $to_coerce = $args->{"no_validation_needed"};
1211             (
1212             (
1213             !ref $to_coerce
1214             and (!defined $to_coerce
1215             or $to_coerce eq q()
1216             or $to_coerce eq '0'
1217             or $to_coerce eq '1' )
1218             )
1219             ) ? $to_coerce
1220             : ( ( !!1 ) )
1221 0 0 0     0 ? scalar( do { local $_ = $to_coerce; !!$_ } )
  0         0  
  0         0  
1222             : $to_coerce;
1223             };
1224             (
1225 0 0 0     0 !ref $coerced_value
      0        
1226             and (!defined $coerced_value
1227             or $coerced_value eq q()
1228             or $coerced_value eq '0'
1229             or $coerced_value eq '1' )
1230             )
1231             or croak "Type check failed in constructor: %s should be %s",
1232             "no_validation_needed", "Bool";
1233 0         0 $self->{"no_validation_needed"} = $coerced_value;
1234             };
1235             }
1236              
1237             # Attribute is_mutator (type: Bool)
1238             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 70
1239 1 50       6 if ( exists $args->{"is_mutator"} ) {
1240 0         0 do {
1241 0         0 my $coerced_value = do {
1242 0         0 my $to_coerce = $args->{"is_mutator"};
1243             (
1244             (
1245             !ref $to_coerce
1246             and (!defined $to_coerce
1247             or $to_coerce eq q()
1248             or $to_coerce eq '0'
1249             or $to_coerce eq '1' )
1250             )
1251             ) ? $to_coerce
1252             : ( ( !!1 ) )
1253 0 0 0     0 ? scalar( do { local $_ = $to_coerce; !!$_ } )
  0         0  
  0         0  
1254             : $to_coerce;
1255             };
1256             (
1257 0 0 0     0 !ref $coerced_value
      0        
1258             and (!defined $coerced_value
1259             or $coerced_value eq q()
1260             or $coerced_value eq '0'
1261             or $coerced_value eq '1' )
1262             )
1263             or croak "Type check failed in constructor: %s should be %s",
1264             "is_mutator", "Bool";
1265 0         0 $self->{"is_mutator"} = $coerced_value;
1266             };
1267             }
1268              
1269             # Attribute allow_getter_shortcuts (type: Bool)
1270             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 72
1271 1         3 do {
1272             my $value =
1273             exists( $args->{"allow_getter_shortcuts"} )
1274 1 50       3 ? $args->{"allow_getter_shortcuts"}
1275             : true;
1276 1         2 do {
1277 1         2 my $coerced_value = do {
1278 1         3 my $to_coerce = $value;
1279             (
1280             (
1281             !ref $to_coerce
1282             and (!defined $to_coerce
1283             or $to_coerce eq q()
1284             or $to_coerce eq '0'
1285             or $to_coerce eq '1' )
1286             )
1287             ) ? $to_coerce
1288             : ( ( !!1 ) )
1289 1 50 33     22 ? scalar( do { local $_ = $to_coerce; !!$_ } )
  0         0  
  0         0  
1290             : $to_coerce;
1291             };
1292             (
1293 1 50 33     25 !ref $coerced_value
      33        
1294             and (!defined $coerced_value
1295             or $coerced_value eq q()
1296             or $coerced_value eq '0'
1297             or $coerced_value eq '1' )
1298             )
1299             or croak "Type check failed in constructor: %s should be %s",
1300             "allow_getter_shortcuts", "Bool";
1301 1         4 $self->{"allow_getter_shortcuts"} = $coerced_value;
1302             };
1303             };
1304              
1305             # Attribute prefer_shift_self (type: Bool)
1306             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 79
1307 1         2 do {
1308             my $value =
1309             exists( $args->{"prefer_shift_self"} )
1310 1 50       13 ? $args->{"prefer_shift_self"}
1311             : false;
1312 1         4 do {
1313 1         2 my $coerced_value = do {
1314 1         2 my $to_coerce = $value;
1315             (
1316             (
1317             !ref $to_coerce
1318             and (!defined $to_coerce
1319             or $to_coerce eq q()
1320             or $to_coerce eq '0'
1321             or $to_coerce eq '1' )
1322             )
1323             ) ? $to_coerce
1324             : ( ( !!1 ) )
1325 1 50 33     25 ? scalar( do { local $_ = $to_coerce; !!$_ } )
  0         0  
  0         0  
1326             : $to_coerce;
1327             };
1328             (
1329 1 0 33     9 !ref $coerced_value
      33        
1330             and (!defined $coerced_value
1331             or $coerced_value eq q()
1332             or $coerced_value eq '0'
1333             or $coerced_value eq '1' )
1334             )
1335             or croak "Type check failed in constructor: %s should be %s",
1336             "prefer_shift_self", "Bool";
1337 1         4 $self->{"prefer_shift_self"} = $coerced_value;
1338             };
1339             };
1340              
1341             # Attribute additional_validation (type: CodeRef|Str|Undef)
1342             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 86
1343 1 50       4 if ( exists $args->{"additional_validation"} ) {
1344 0 0       0 do {
1345              
1346             package Sub::HandlesVia::Mite;
1347             (
1348             do {
1349              
1350             package Sub::HandlesVia::Mite;
1351 0         0 ref( $args->{"additional_validation"} ) eq 'CODE';
1352             }
1353             or do {
1354              
1355             package Sub::HandlesVia::Mite;
1356 0 0       0 defined( $args->{"additional_validation"} ) and do {
1357             ref( \$args->{"additional_validation"} ) eq 'SCALAR'
1358             or ref(
1359 0 0       0 \( my $val = $args->{"additional_validation"} )
1360             ) eq 'SCALAR';
1361             }
1362             }
1363 0 0 0     0 or do {
1364              
1365             package Sub::HandlesVia::Mite;
1366 0         0 !defined( $args->{"additional_validation"} );
1367             }
1368             );
1369             }
1370             or croak "Type check failed in constructor: %s should be %s",
1371             "additional_validation", "CodeRef|Str|Undef";
1372 0         0 $self->{"additional_validation"} = $args->{"additional_validation"};
1373             }
1374              
1375             # Attribute default_for_reset (type: CodeRef)
1376             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 91
1377 1 50       4 if ( exists $args->{"default_for_reset"} ) {
1378 0 0       0 do {
1379              
1380             package Sub::HandlesVia::Mite;
1381 0         0 ref( $args->{"default_for_reset"} ) eq 'CODE';
1382             }
1383             or croak "Type check failed in constructor: %s should be %s",
1384             "default_for_reset", "CodeRef";
1385 0         0 $self->{"default_for_reset"} = $args->{"default_for_reset"};
1386             }
1387              
1388             # Attribute documentation (type: Str)
1389             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 96
1390 1 50       4 if ( exists $args->{"documentation"} ) {
1391 0 0       0 do {
1392              
1393             package Sub::HandlesVia::Mite;
1394 0 0       0 defined( $args->{"documentation"} ) and do {
1395             ref( \$args->{"documentation"} ) eq 'SCALAR'
1396 0 0       0 or ref( \( my $val = $args->{"documentation"} ) ) eq
1397             'SCALAR';
1398             }
1399             }
1400             or croak "Type check failed in constructor: %s should be %s",
1401             "documentation", "Str";
1402 0         0 $self->{"documentation"} = $args->{"documentation"};
1403             }
1404              
1405             # Attribute _examples (type: CodeRef)
1406             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 101
1407 1 50       5 if ( exists $args->{"_examples"} ) {
1408 0 0       0 do {
1409              
1410             package Sub::HandlesVia::Mite;
1411 0         0 ref( $args->{"_examples"} ) eq 'CODE';
1412             }
1413             or croak "Type check failed in constructor: %s should be %s",
1414             "_examples", "CodeRef";
1415 0         0 $self->{"_examples"} = $args->{"_examples"};
1416             }
1417              
1418             # Attribute name (type: Str)
1419             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 282
1420 1 50       5 croak "Missing key in constructor: name" unless exists $args->{"name"};
1421 1 50       11 do {
1422              
1423             package Sub::HandlesVia::Mite;
1424 1 50       9 defined( $args->{"name"} ) and do {
1425             ref( \$args->{"name"} ) eq 'SCALAR'
1426 1 50       15 or ref( \( my $val = $args->{"name"} ) ) eq 'SCALAR';
1427             }
1428             }
1429             or croak "Type check failed in constructor: %s should be %s", "name",
1430             "Str";
1431 1         5 $self->{"name"} = $args->{"name"};
1432              
1433             # Call BUILD methods
1434 1 50 33     4 $self->BUILDALL($args) if ( !$no_build and @{ $meta->{BUILD} || [] } );
  1 50       7  
1435              
1436             # Unrecognized parameters
1437             my @unknown = grep not(
1438             /\A(?:_examples|a(?:dditional_validation|llow_getter_shortcuts|rgs)|curried|d(?:efault_for_reset|ocumentation)|is_(?:chainable|mutator)|lvalue_template|m(?:ax_args|in_args)|n(?:ame|o_validation_needed)|prefer_shift_self|signature|template|usage)\z/
1439 1         5 ), keys %{$args};
  1         15  
1440             @unknown
1441 1 50       5 and croak(
1442             "Unexpected keys in constructor: " . join( q[, ], sort @unknown ) );
1443              
1444 1         5 return $self;
1445             }
1446              
1447             my $__XS = !$ENV{PERL_ONLY}
1448             && eval { require Class::XSAccessor; Class::XSAccessor->VERSION("1.19") };
1449              
1450             # Accessors for name
1451             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 282
1452             if ($__XS) {
1453             Class::XSAccessor->import(
1454             chained => 1,
1455             "getters" => { "name" => "name" },
1456             );
1457             }
1458             else {
1459             *name = sub {
1460             @_ == 1 or croak('Reader "name" usage: $self->name()');
1461             $_[0]{"name"};
1462             };
1463             }
1464              
1465             # See UNIVERSAL
1466             sub DOES {
1467 2304     2304   4338 my ( $self, $role ) = @_;
1468 2304         3092 our %DOES;
1469 2304 50       4861 return $DOES{$role} if exists $DOES{$role};
1470 2304 50       5514 return 1 if $role eq __PACKAGE__;
1471 2304 50 33     5666 if ( $INC{'Moose/Util.pm'}
      66        
1472             and my $meta = Moose::Util::find_meta( ref $self or $self ) )
1473             {
1474 0 0 0     0 $meta->can('does_role') and $meta->does_role($role) and return 1;
1475             }
1476 2304         8469 return $self->SUPER::DOES($role);
1477             }
1478              
1479             # Alias for Moose/Moo-compatibility
1480             sub does {
1481 2304     2304   172125 shift->DOES(@_);
1482             }
1483              
1484             1;
1485             }
1486             {
1487              
1488             package Sub::HandlesVia::Handler::CodeRef;
1489 96     96   955 use strict;
  96         274  
  96         2958  
1490 96     96   618 use warnings;
  96         277  
  96         3597  
1491 96     96   686 no warnings qw( once void );
  96         273  
  96         13887  
1492              
1493             our $USES_MITE = "Mite::Class";
1494             our $MITE_SHIM = "Sub::HandlesVia::Mite";
1495             our $MITE_VERSION = "0.012000";
1496              
1497             # Mite keywords
1498             BEGIN {
1499 96     96   629 my ( $SHIM, $CALLER ) =
1500             ( "Sub::HandlesVia::Mite", "Sub::HandlesVia::Handler::CodeRef" );
1501             (
1502             *after, *around, *before, *extends, *field,
1503             *has, *param, *signature_for, *with
1504             )
1505 96         202 = do {
1506              
1507             package Sub::HandlesVia::Mite;
1508 96     96   763 no warnings 'redefine';
  96         286  
  96         24450  
1509             (
1510 0         0 sub { $SHIM->HANDLE_after( $CALLER, "class", @_ ) },
1511 0         0 sub { $SHIM->HANDLE_around( $CALLER, "class", @_ ) },
1512 0         0 sub { $SHIM->HANDLE_before( $CALLER, "class", @_ ) },
1513             sub { },
1514 0         0 sub { $SHIM->HANDLE_has( $CALLER, field => @_ ) },
1515 96         989 sub { $SHIM->HANDLE_has( $CALLER, has => @_ ) },
1516 0         0 sub { $SHIM->HANDLE_has( $CALLER, param => @_ ) },
1517 0         0 sub { $SHIM->HANDLE_signature_for( $CALLER, "class", @_ ) },
1518 0         0 sub { $SHIM->HANDLE_with( $CALLER, @_ ) },
1519 96         19547 );
1520             };
1521             }
1522              
1523             # Mite imports
1524             BEGIN {
1525 96     96   865 require Scalar::Util;
1526 96         441 *STRICT = \&Sub::HandlesVia::Mite::STRICT;
1527 96         328 *bare = \&Sub::HandlesVia::Mite::bare;
1528 96         309 *blessed = \&Scalar::Util::blessed;
1529 96         249 *carp = \&Sub::HandlesVia::Mite::carp;
1530 96         263 *confess = \&Sub::HandlesVia::Mite::confess;
1531 96         231 *croak = \&Sub::HandlesVia::Mite::croak;
1532 96         253 *false = \&Sub::HandlesVia::Mite::false;
1533 96         241 *guard = \&Sub::HandlesVia::Mite::guard;
1534 96         251 *lazy = \&Sub::HandlesVia::Mite::lazy;
1535 96         309 *lock = \&Sub::HandlesVia::Mite::lock;
1536 96         262 *ro = \&Sub::HandlesVia::Mite::ro;
1537 96         272 *rw = \&Sub::HandlesVia::Mite::rw;
1538 96         254 *rwp = \&Sub::HandlesVia::Mite::rwp;
1539 96         247 *true = \&Sub::HandlesVia::Mite::true;
1540 96         3865 *unlock = \&Sub::HandlesVia::Mite::unlock;
1541             }
1542              
1543             BEGIN {
1544              
1545 96     96   695 use mro 'c3';
  96         229  
  96         591  
1546 96     96   4806 our @ISA;
1547 96         225187 push @ISA, "Sub::HandlesVia::Handler";
1548             }
1549              
1550             # Standard Moose/Moo-style constructor
1551             sub new {
1552 2 50   2   8 my $class = ref( $_[0] ) ? ref(shift) : shift;
1553 2   66     13 my $meta = ( $Mite::META{$class} ||= $class->__META__ );
1554 2         6 my $self = bless {}, $class;
1555             my $args =
1556             $meta->{HAS_BUILDARGS}
1557             ? $class->BUILDARGS(@_)
1558 2 50       23 : { ( @_ == 1 ) ? %{ $_[0] } : @_ };
  0 50       0  
1559 2         5 my $no_build = delete $args->{__no_BUILD__};
1560              
1561             # Attribute name (type: Str)
1562             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 12
1563 2 50       6 if ( exists $args->{"name"} ) {
1564 2 50       4 do {
1565              
1566             package Sub::HandlesVia::Mite;
1567 2 50       6 defined( $args->{"name"} ) and do {
1568             ref( \$args->{"name"} ) eq 'SCALAR'
1569 2 50       11 or ref( \( my $val = $args->{"name"} ) ) eq 'SCALAR';
1570             }
1571             }
1572             or croak "Type check failed in constructor: %s should be %s",
1573             "name", "Str";
1574 2         9 $self->{"name"} = $args->{"name"};
1575             }
1576              
1577             # Attribute template (type: Str)
1578             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 17
1579 2 50       18 if ( exists $args->{"template"} ) {
1580 0 0       0 do {
1581              
1582             package Sub::HandlesVia::Mite;
1583 0 0       0 defined( $args->{"template"} ) and do {
1584             ref( \$args->{"template"} ) eq 'SCALAR'
1585 0 0       0 or ref( \( my $val = $args->{"template"} ) ) eq 'SCALAR';
1586             }
1587             }
1588             or croak "Type check failed in constructor: %s should be %s",
1589             "template", "Str";
1590 0         0 $self->{"template"} = $args->{"template"};
1591             }
1592              
1593             # Attribute lvalue_template (type: Str)
1594             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 22
1595 2 50       6 if ( exists $args->{"lvalue_template"} ) {
1596 0 0       0 do {
1597              
1598             package Sub::HandlesVia::Mite;
1599 0 0       0 defined( $args->{"lvalue_template"} ) and do {
1600             ref( \$args->{"lvalue_template"} ) eq 'SCALAR'
1601 0 0       0 or ref( \( my $val = $args->{"lvalue_template"} ) ) eq
1602             'SCALAR';
1603             }
1604             }
1605             or croak "Type check failed in constructor: %s should be %s",
1606             "lvalue_template", "Str";
1607 0         0 $self->{"lvalue_template"} = $args->{"lvalue_template"};
1608             }
1609              
1610             # Attribute args (type: Int|Undef)
1611             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 27
1612 2         3 do {
1613 2 100       6 my $value = exists( $args->{"args"} ) ? $args->{"args"} : undef;
1614 2 50       3 do {
1615              
1616             package Sub::HandlesVia::Mite;
1617             (
1618             (
1619 2 50       4 do {
1620 2         4 my $tmp = $value;
1621 2 50 33     24 defined($tmp)
1622             and !ref($tmp)
1623             and $tmp =~ /\A-?[0-9]+\z/;
1624             }
1625             )
1626             or ( !defined($value) )
1627             );
1628             }
1629             or croak "Type check failed in constructor: %s should be %s",
1630             "args", "Int|Undef";
1631 2         6 $self->{"args"} = $value;
1632             };
1633              
1634             # Attribute min_args (type: Int|Undef)
1635             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 37
1636 2 100       5 if ( exists $args->{"min_args"} ) {
1637 1 50       2 do {
1638              
1639             package Sub::HandlesVia::Mite;
1640             (
1641             (
1642             do {
1643 1         3 my $tmp = $args->{"min_args"};
1644 1 50 33     6 defined($tmp)
1645             and !ref($tmp)
1646             and $tmp =~ /\A-?[0-9]+\z/;
1647             }
1648             )
1649 1 50       2 or do {
1650              
1651             package Sub::HandlesVia::Mite;
1652 1         6 !defined( $args->{"min_args"} );
1653             }
1654             );
1655             }
1656             or croak "Type check failed in constructor: %s should be %s",
1657             "min_args", "Int|Undef";
1658 1         2 $self->{"min_args"} = $args->{"min_args"};
1659             }
1660              
1661             # Attribute max_args (type: Int|Undef)
1662             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 37
1663 2 100       7 if ( exists $args->{"max_args"} ) {
1664 1 50       2 do {
1665              
1666             package Sub::HandlesVia::Mite;
1667             (
1668             (
1669             do {
1670 1         3 my $tmp = $args->{"max_args"};
1671 1 50 33     16 defined($tmp)
1672             and !ref($tmp)
1673             and $tmp =~ /\A-?[0-9]+\z/;
1674             }
1675             )
1676 1 50       1 or do {
1677              
1678             package Sub::HandlesVia::Mite;
1679 1         7 !defined( $args->{"max_args"} );
1680             }
1681             );
1682             }
1683             or croak "Type check failed in constructor: %s should be %s",
1684             "max_args", "Int|Undef";
1685 1         10 $self->{"max_args"} = $args->{"max_args"};
1686             }
1687              
1688             # Attribute signature (type: ArrayRef|Undef)
1689             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 43
1690 2 100       18 if ( exists $args->{"signature"} ) {
1691 1 50       2 do {
1692              
1693             package Sub::HandlesVia::Mite;
1694             (
1695             do {
1696              
1697             package Sub::HandlesVia::Mite;
1698 1         6 ref( $args->{"signature"} ) eq 'ARRAY';
1699             }
1700 1 50       9 or do {
1701              
1702             package Sub::HandlesVia::Mite;
1703 1         5 !defined( $args->{"signature"} );
1704             }
1705             );
1706             }
1707             or croak "Type check failed in constructor: %s should be %s",
1708             "signature", "ArrayRef|Undef";
1709 1         3 $self->{"signature"} = $args->{"signature"};
1710             }
1711              
1712             # Attribute usage (type: Str)
1713             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 48
1714 2 50       5 if ( exists $args->{"usage"} ) {
1715 0 0       0 do {
1716              
1717             package Sub::HandlesVia::Mite;
1718 0 0       0 defined( $args->{"usage"} ) and do {
1719             ref( \$args->{"usage"} ) eq 'SCALAR'
1720 0 0       0 or ref( \( my $val = $args->{"usage"} ) ) eq 'SCALAR';
1721             }
1722             }
1723             or croak "Type check failed in constructor: %s should be %s",
1724             "usage", "Str";
1725 0         0 $self->{"usage"} = $args->{"usage"};
1726             }
1727              
1728             # Attribute curried (type: ArrayRef)
1729             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 54
1730 2 100       20 if ( exists $args->{"curried"} ) {
1731 1 50       2 do {
1732              
1733             package Sub::HandlesVia::Mite;
1734 1         4 ref( $args->{"curried"} ) eq 'ARRAY';
1735             }
1736             or croak "Type check failed in constructor: %s should be %s",
1737             "curried", "ArrayRef";
1738 1         3 $self->{"curried"} = $args->{"curried"};
1739             }
1740              
1741             # Attribute is_chainable (type: Bool)
1742             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 59
1743 2 50       7 if ( exists $args->{"is_chainable"} ) {
1744 0         0 do {
1745 0         0 my $coerced_value = do {
1746 0         0 my $to_coerce = $args->{"is_chainable"};
1747             (
1748             (
1749             !ref $to_coerce
1750             and (!defined $to_coerce
1751             or $to_coerce eq q()
1752             or $to_coerce eq '0'
1753             or $to_coerce eq '1' )
1754             )
1755             ) ? $to_coerce
1756             : ( ( !!1 ) )
1757 0 0 0     0 ? scalar( do { local $_ = $to_coerce; !!$_ } )
  0         0  
  0         0  
1758             : $to_coerce;
1759             };
1760             (
1761 0 0 0     0 !ref $coerced_value
      0        
1762             and (!defined $coerced_value
1763             or $coerced_value eq q()
1764             or $coerced_value eq '0'
1765             or $coerced_value eq '1' )
1766             )
1767             or croak "Type check failed in constructor: %s should be %s",
1768             "is_chainable", "Bool";
1769 0         0 $self->{"is_chainable"} = $coerced_value;
1770             };
1771             }
1772              
1773             # Attribute no_validation_needed (type: Bool)
1774             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 59
1775 2 50       7 if ( exists $args->{"no_validation_needed"} ) {
1776 0         0 do {
1777 0         0 my $coerced_value = do {
1778 0         0 my $to_coerce = $args->{"no_validation_needed"};
1779             (
1780             (
1781             !ref $to_coerce
1782             and (!defined $to_coerce
1783             or $to_coerce eq q()
1784             or $to_coerce eq '0'
1785             or $to_coerce eq '1' )
1786             )
1787             ) ? $to_coerce
1788             : ( ( !!1 ) )
1789 0 0 0     0 ? scalar( do { local $_ = $to_coerce; !!$_ } )
  0         0  
  0         0  
1790             : $to_coerce;
1791             };
1792             (
1793 0 0 0     0 !ref $coerced_value
      0        
1794             and (!defined $coerced_value
1795             or $coerced_value eq q()
1796             or $coerced_value eq '0'
1797             or $coerced_value eq '1' )
1798             )
1799             or croak "Type check failed in constructor: %s should be %s",
1800             "no_validation_needed", "Bool";
1801 0         0 $self->{"no_validation_needed"} = $coerced_value;
1802             };
1803             }
1804              
1805             # Attribute is_mutator (type: Bool)
1806             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 70
1807 2 50       7 if ( exists $args->{"is_mutator"} ) {
1808 0         0 do {
1809 0         0 my $coerced_value = do {
1810 0         0 my $to_coerce = $args->{"is_mutator"};
1811             (
1812             (
1813             !ref $to_coerce
1814             and (!defined $to_coerce
1815             or $to_coerce eq q()
1816             or $to_coerce eq '0'
1817             or $to_coerce eq '1' )
1818             )
1819             ) ? $to_coerce
1820             : ( ( !!1 ) )
1821 0 0 0     0 ? scalar( do { local $_ = $to_coerce; !!$_ } )
  0         0  
  0         0  
1822             : $to_coerce;
1823             };
1824             (
1825 0 0 0     0 !ref $coerced_value
      0        
1826             and (!defined $coerced_value
1827             or $coerced_value eq q()
1828             or $coerced_value eq '0'
1829             or $coerced_value eq '1' )
1830             )
1831             or croak "Type check failed in constructor: %s should be %s",
1832             "is_mutator", "Bool";
1833 0         0 $self->{"is_mutator"} = $coerced_value;
1834             };
1835             }
1836              
1837             # Attribute allow_getter_shortcuts (type: Bool)
1838             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 72
1839 2         3 do {
1840             my $value =
1841             exists( $args->{"allow_getter_shortcuts"} )
1842 2 100       7 ? $args->{"allow_getter_shortcuts"}
1843             : true;
1844 2         3 do {
1845 2         3 my $coerced_value = do {
1846 2         5 my $to_coerce = $value;
1847             (
1848             (
1849             !ref $to_coerce
1850             and (!defined $to_coerce
1851             or $to_coerce eq q()
1852             or $to_coerce eq '0'
1853             or $to_coerce eq '1' )
1854             )
1855             ) ? $to_coerce
1856             : ( ( !!1 ) )
1857 2 50 33     28 ? scalar( do { local $_ = $to_coerce; !!$_ } )
  0         0  
  0         0  
1858             : $to_coerce;
1859             };
1860             (
1861 2 50 33     25 !ref $coerced_value
      33        
1862             and (!defined $coerced_value
1863             or $coerced_value eq q()
1864             or $coerced_value eq '0'
1865             or $coerced_value eq '1' )
1866             )
1867             or croak "Type check failed in constructor: %s should be %s",
1868             "allow_getter_shortcuts", "Bool";
1869 2         6 $self->{"allow_getter_shortcuts"} = $coerced_value;
1870             };
1871             };
1872              
1873             # Attribute prefer_shift_self (type: Bool)
1874             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 79
1875 2         12 do {
1876             my $value =
1877             exists( $args->{"prefer_shift_self"} )
1878 2 100       8 ? $args->{"prefer_shift_self"}
1879             : false;
1880 2         4 do {
1881 2         4 my $coerced_value = do {
1882 2         3 my $to_coerce = $value;
1883             (
1884             (
1885             !ref $to_coerce
1886             and (!defined $to_coerce
1887             or $to_coerce eq q()
1888             or $to_coerce eq '0'
1889             or $to_coerce eq '1' )
1890             )
1891             ) ? $to_coerce
1892             : ( ( !!1 ) )
1893 2 50 33     15 ? scalar( do { local $_ = $to_coerce; !!$_ } )
  0         0  
  0         0  
1894             : $to_coerce;
1895             };
1896             (
1897 2 0 33     13 !ref $coerced_value
      33        
1898             and (!defined $coerced_value
1899             or $coerced_value eq q()
1900             or $coerced_value eq '0'
1901             or $coerced_value eq '1' )
1902             )
1903             or croak "Type check failed in constructor: %s should be %s",
1904             "prefer_shift_self", "Bool";
1905 2         6 $self->{"prefer_shift_self"} = $coerced_value;
1906             };
1907             };
1908              
1909             # Attribute additional_validation (type: CodeRef|Str|Undef)
1910             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 86
1911 2 50       6 if ( exists $args->{"additional_validation"} ) {
1912 0 0       0 do {
1913              
1914             package Sub::HandlesVia::Mite;
1915             (
1916             do {
1917              
1918             package Sub::HandlesVia::Mite;
1919 0         0 ref( $args->{"additional_validation"} ) eq 'CODE';
1920             }
1921             or do {
1922              
1923             package Sub::HandlesVia::Mite;
1924 0 0       0 defined( $args->{"additional_validation"} ) and do {
1925             ref( \$args->{"additional_validation"} ) eq 'SCALAR'
1926             or ref(
1927 0 0       0 \( my $val = $args->{"additional_validation"} )
1928             ) eq 'SCALAR';
1929             }
1930             }
1931 0 0 0     0 or do {
1932              
1933             package Sub::HandlesVia::Mite;
1934 0         0 !defined( $args->{"additional_validation"} );
1935             }
1936             );
1937             }
1938             or croak "Type check failed in constructor: %s should be %s",
1939             "additional_validation", "CodeRef|Str|Undef";
1940 0         0 $self->{"additional_validation"} = $args->{"additional_validation"};
1941             }
1942              
1943             # Attribute default_for_reset (type: CodeRef)
1944             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 91
1945 2 50       6 if ( exists $args->{"default_for_reset"} ) {
1946 0 0       0 do {
1947              
1948             package Sub::HandlesVia::Mite;
1949 0         0 ref( $args->{"default_for_reset"} ) eq 'CODE';
1950             }
1951             or croak "Type check failed in constructor: %s should be %s",
1952             "default_for_reset", "CodeRef";
1953 0         0 $self->{"default_for_reset"} = $args->{"default_for_reset"};
1954             }
1955              
1956             # Attribute documentation (type: Str)
1957             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 96
1958 2 50       5 if ( exists $args->{"documentation"} ) {
1959 0 0       0 do {
1960              
1961             package Sub::HandlesVia::Mite;
1962 0 0       0 defined( $args->{"documentation"} ) and do {
1963             ref( \$args->{"documentation"} ) eq 'SCALAR'
1964 0 0       0 or ref( \( my $val = $args->{"documentation"} ) ) eq
1965             'SCALAR';
1966             }
1967             }
1968             or croak "Type check failed in constructor: %s should be %s",
1969             "documentation", "Str";
1970 0         0 $self->{"documentation"} = $args->{"documentation"};
1971             }
1972              
1973             # Attribute _examples (type: CodeRef)
1974             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 101
1975 2 50       6 if ( exists $args->{"_examples"} ) {
1976 0 0       0 do {
1977              
1978             package Sub::HandlesVia::Mite;
1979 0         0 ref( $args->{"_examples"} ) eq 'CODE';
1980             }
1981             or croak "Type check failed in constructor: %s should be %s",
1982             "_examples", "CodeRef";
1983 0         0 $self->{"_examples"} = $args->{"_examples"};
1984             }
1985              
1986             # Attribute delegated_coderef (type: CodeRef)
1987             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 303
1988             croak "Missing key in constructor: delegated_coderef"
1989 2 50       12 unless exists $args->{"delegated_coderef"};
1990 2 50       3 do {
1991              
1992             package Sub::HandlesVia::Mite;
1993 2         10 ref( $args->{"delegated_coderef"} ) eq 'CODE';
1994             }
1995             or croak "Type check failed in constructor: %s should be %s",
1996             "delegated_coderef", "CodeRef";
1997 2         7 $self->{"delegated_coderef"} = $args->{"delegated_coderef"};
1998              
1999             # Call BUILD methods
2000 2 50 33     13 $self->BUILDALL($args) if ( !$no_build and @{ $meta->{BUILD} || [] } );
  2 50       20  
2001              
2002             # Unrecognized parameters
2003             my @unknown = grep not(
2004             /\A(?:_examples|a(?:dditional_validation|llow_getter_shortcuts|rgs)|curried|d(?:e(?:fault_for_reset|legated_coderef)|ocumentation)|is_(?:chainable|mutator)|lvalue_template|m(?:ax_args|in_args)|n(?:ame|o_validation_needed)|prefer_shift_self|signature|template|usage)\z/
2005 2         4 ), keys %{$args};
  2         45  
2006             @unknown
2007 2 50       16 and croak(
2008             "Unexpected keys in constructor: " . join( q[, ], sort @unknown ) );
2009              
2010 2         17 return $self;
2011             }
2012              
2013             my $__XS = !$ENV{PERL_ONLY}
2014             && eval { require Class::XSAccessor; Class::XSAccessor->VERSION("1.19") };
2015              
2016             # Accessors for delegated_coderef
2017             # has declaration, file lib/Sub/HandlesVia/Handler.pm, line 303
2018             if ($__XS) {
2019             Class::XSAccessor->import(
2020             chained => 1,
2021             "getters" => { "delegated_coderef" => "delegated_coderef" },
2022             );
2023             }
2024             else {
2025             *delegated_coderef = sub {
2026             @_ == 1
2027             or croak(
2028             'Reader "delegated_coderef" usage: $self->delegated_coderef()');
2029             $_[0]{"delegated_coderef"};
2030             };
2031             }
2032              
2033             # See UNIVERSAL
2034             sub DOES {
2035 2304     2304   4428 my ( $self, $role ) = @_;
2036 2304         3193 our %DOES;
2037 2304 50       4752 return $DOES{$role} if exists $DOES{$role};
2038 2304 50       4171 return 1 if $role eq __PACKAGE__;
2039 2304 50 33     5621 if ( $INC{'Moose/Util.pm'}
      66        
2040             and my $meta = Moose::Util::find_meta( ref $self or $self ) )
2041             {
2042 0 0 0     0 $meta->can('does_role') and $meta->does_role($role) and return 1;
2043             }
2044 2304         8646 return $self->SUPER::DOES($role);
2045             }
2046              
2047             # Alias for Moose/Moo-compatibility
2048             sub does {
2049 2304     2304   169859 shift->DOES(@_);
2050             }
2051              
2052             1;
2053             }