prep for cpan
[gitmo/MooseX-Dependent.git] / docs / facets
CommitLineData
fb583a23 1
2use MooseX::Types -declare [qw/Str/];
3use MooseX::Types::Faceted qw(Str);
4
5subtype 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
19use MooseX::Types::Moose qw(Int Str ArrayRef HashRef Object);
20use MooseX::Types::Structured qw(Dict);
21
22use MooseX::Types
23 -declare => [qw/PositiveInt Length/];
24
25use MooseX::Types::Parameterizable
26 -declare => [qw/MinLength MaxLength Size/];
27
28subtype PositiveInt,
29 as Int,
30 where { $_ >= 0 };
31
32type Length,
33 where { exists $_ && defined $_ };
34
35coerce 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
45subtype MinLength[Length],
46 as Value,
47 where {
48 my ($check, $parameter) = @_
49 return $parameter < length($check) ? 1:0;
50 };
51
52subtype MaxLength[Length],
53 as Value,
54 where {
55 my ($check, $parameter) = @_
56 return $parameter >= length($check) ? 1:0;
57 };
58
59subtype 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