added enum test, more docs both internal and external and a few minor code clarification
[gitmo/MooseX-Types.git] / t / lib / DecoratorLibrary.pm
1 package DecoratorLibrary;
2
3 use MooseX::Types::Moose qw( Str ArrayRef HashRef Int );
4 use MooseX::Types
5     -declare => [qw(
6         MyArrayRefBase
7         MyArrayRefInt01
8         MyArrayRefInt02
9         MyHashRefOfInts
10         MyHashRefOfStr
11         StrOrArrayRef
12         AtLeastOneInt
13         Jobs
14     )];
15
16 ## Some questionable messing around
17     sub my_subtype {
18         my ($subtype, $basetype, @rest) = @_;
19         return subtype($subtype, $basetype, shift @rest, shift @rest);
20     }
21     
22     sub my_from {
23         return @_;
24         
25     }
26     sub my_as {
27         return @_;
28     }
29 ## End
30
31 subtype MyArrayRefBase,
32     as ArrayRef;
33     
34 coerce MyArrayRefBase,
35     from Str,
36     via {[split(',', $_)]};
37     
38 subtype MyArrayRefInt01,
39     as ArrayRef[Int];
40
41 coerce MyArrayRefInt01,
42     from Str,
43     via {[split('\.',$_)]},
44     from HashRef,
45     via {[sort values(%$_)]};
46     
47 subtype MyArrayRefInt02,
48     as MyArrayRefBase[Int];
49     
50 subtype MyHashRefOfInts,
51     as HashRef[Int];
52     
53 subtype MyHashRefOfStr,
54     as HashRef[Str];
55
56 coerce MyArrayRefInt02,
57     from Str,
58     via {[split(':',$_)]},
59     from MyHashRefOfInts,
60     via {[sort values(%$_)]},
61     from MyHashRefOfStr,
62     via {[ sort map { length $_ } values(%$_) ]},
63     from HashRef[ArrayRef],
64     via {[ sort map { @$_ } values(%$_) ]};
65
66 subtype StrOrArrayRef,
67     as Str|ArrayRef;
68
69 subtype AtLeastOneInt,
70     as ArrayRef[Int],
71     where { @$_ > 0 };
72     
73 enum Jobs,
74     (qw/Programming Teaching Banking/);
75     
76 1;