Merge pull request #3 from brianphillips/master
[gitmo/MooseX-Dependent.git] / docs / facets
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