overloading for union constraints, more tests, some code cleanup
[gitmo/MooseX-Types.git] / t / lib / DecoratorLibrary.pm
1 package DecoratorLibrary;
2
3 use warnings;
4 use strict;
5
6 use MooseX::Types::Moose qw( Str ArrayRef HashRef Int );
7 use MooseX::Types
8     -declare => [qw(
9         MyArrayRefBase
10         MyArrayRefInt01
11         MyArrayRefInt02
12         MyHashRefOfInts
13         MyHashRefOfStr
14         StrOrArrayRef
15     )];
16
17 subtype MyArrayRefBase,
18     as ArrayRef;
19     
20 coerce MyArrayRefBase,
21     from Str,
22     via {[split(',', $_)]};
23     
24 subtype MyArrayRefInt01,
25     as ArrayRef[Int];
26
27 coerce MyArrayRefInt01,
28     from Str,
29     via {[split('\.',$_)]},
30     from HashRef,
31     via {[sort values(%$_)]};
32     
33 subtype MyArrayRefInt02,
34     as MyArrayRefBase[Int];
35     
36 subtype MyHashRefOfInts,
37     as HashRef[Int];
38     
39 subtype MyHashRefOfStr,
40     as HashRef[Str];
41
42 coerce MyArrayRefInt02,
43     from Str,
44     via {[split(':',$_)]},
45     from MyHashRefOfInts,
46     via {[sort values(%$_)]},
47     from MyHashRefOfStr,
48     via {[ sort map { length $_ } values(%$_) ]},
49     ### Can't do HashRef[ArrayRef] here, need to force precidence I guess???
50     from HashRef([ArrayRef]),
51     via {[ sort map { @$_ } values(%$_)] };
52
53 subtype StrOrArrayRef,
54     from Str|ArrayRef;
55 1;