Commit | Line | Data |
fb583a23 |
1 | |
2 | use MooseX::Types -declare [qw/Str/]; |
3 | use MooseX::Types::Faceted qw(Str); |
4 | |
5 | subtype Name() |
6 | => as Str() |
7 | => with hasMaxLength(25), |
8 | isWordCharacters(), |
9 | callBack { |
10 | |
11 | |
12 | |
13 | => as Faceted[ |
14 | Str(), |
15 | hasMaxLength(25), |
16 | ], |
17 | |
18 | |
19 | use MooseX::Types::Moose qw(Int Str ArrayRef HashRef Object); |
20 | use MooseX::Types::Structured qw(Dict); |
21 | |
22 | use MooseX::Types |
23 | -declare => [qw/PositiveInt Length/]; |
24 | |
25 | use MooseX::Types::Parameterizable |
26 | -declare => [qw/MinLength MaxLength Size/]; |
27 | |
28 | subtype PositiveInt, |
29 | as Int, |
30 | where { $_ >= 0 }; |
31 | |
32 | type Length, |
33 | where { exists $_ && defined $_ }; |
34 | |
35 | coerce Length, |
36 | from PositiveInt, |
37 | via { $_ }, |
38 | from Str, |
39 | via { length $_ }, |
40 | from ArrayRef, |
41 | via { scalar @$_ }, |
42 | from HashRef, |
43 | via { scalar keys %$_ }; |
44 | |
45 | subtype MinLength[Length], |
46 | as Value, |
47 | where { |
48 | my ($check, $parameter) = @_ |
49 | return $parameter < length($check) ? 1:0; |
50 | }; |
51 | |
52 | subtype MaxLength[Length], |
53 | as Value, |
54 | where { |
55 | my ($check, $parameter) = @_ |
56 | return $parameter >= length($check) ? 1:0; |
57 | }; |
58 | |
59 | subtype Size[Dict[max=>MaxLength,min=>MinLength]], |
60 | as Value, |
61 | where { |
62 | my ($check, $parameter) = @_; |
63 | $parameter->{max} > $parameter->{min}; |
64 | } |
65 | |
66 | |
67 | Size[min=>5,max=>10]->check('aabbcc'); ## OK, length 6 in range |
68 | Size[min=>5,max=>10]->check('aa'); ## Not OK, length 2 out of range |
69 | Size[min=>5,max=>10]->check([1..8]); ## OK via coercion |
70 | Size[min=>1,max=>3]->check({a=>1,b=>2}); ## Ok via coercion |
71 | Size[min=>5,max=>10]->check($object); ## Not at least an Int |
72 | |
73 | Size[min=>-10,max=>100]; ## NOT PositiveInt |
74 | Size[min=>'aaa', max=>100]; ## Not an Int |
75 | Size[min=>5, max=>2]; ## Not a Range |
76 | |
77 | |