added CheckNumber type constraint
[catagits/Reaction.git] / lib / Reaction / Types / Core.pm
1 package Reaction::Types::Core;
2
3 use MooseX::Types
4     -declare => [qw/SimpleStr NonEmptySimpleStr Password StrongPassword
5                     NonEmptyStr PositiveNum PositiveInt SingleDigit/];
6
7 use MooseX::Types::Moose qw/Str Num Int/;
8
9 subtype 'SimpleStr'
10   => as 'Str'
11   => where { (length($_) <= 255) && ($_ !~ m/\n/) }
12   => message { "Must be a single line of no more than 255 chars" };
13
14 subtype 'NonEmptySimpleStr'
15   => as 'SimpleStr'
16   => where { length($_) > 0 }
17   => message { "Must be a non-empty single line of no more than 255 chars" };
18
19 # XXX duplicating constraint msges since moose only uses last message
20
21 subtype 'Password'
22   => as 'NonEmptySimpleStr'
23   => where { length($_) > 3 }
24   => message { "Must be between 4 and 255 chars" };
25
26 subtype 'StrongPassword'
27   => as 'Password'
28   => where { (length($_) > 7) && (m/[^a-zA-Z]/) }
29   => message {
30        "Must be between 8 and 255 chars, and contain a non-alpha char" };
31
32 subtype 'NonEmptyStr'
33   => as 'Str'
34   => where { length($_) > 0 }
35   => message { "Must not be empty" };
36
37 subtype 'PositiveNum'
38   => as 'Num'
39   => where { $_ >= 0 }
40   => message { "Must be a positive number" };
41
42 subtype 'PositiveInt'
43   => as 'Int'
44   => where { $_ >= 0 }
45   => message { "Must be a positive integer" };
46
47 subtype 'SingleDigit'
48   => as 'PositiveInt'
49   => where { $_ <= 9 }
50   => message { "Must be a single digit" };
51
52 1;
53
54 =head1 NAME
55
56 Reaction::Types::Core
57
58 =head1 SYNOPSIS
59
60 =head1 DESCRIPTION
61
62 Reaction uses the L<Moose> attributes as a base and adds a few of it's own.
63
64 =over 
65
66 =item * SimpleStr
67
68 A Str with no new-line characters.
69
70 =item * NonEmptySimpleStr
71
72 Does what it says on the tin.
73
74 =item * Password
75
76 =item * StrongPassword
77
78 =item * NonEmptyStr
79
80 =item * PositiveNum
81
82 =item * PositiveInt
83
84 =item * SingleDigit
85
86 =back
87
88 =head1 SEE ALSO
89
90 =over 
91
92 =item * L<Moose::Util::TypeConstraints>
93
94 =item * L<Reaction::Types::DBIC>
95
96 =item * L<Reaction::Types::DateTime>
97
98 =item * L<Reaction::Types::Email>
99
100 =item * L<Reaction::Types::File>
101
102 =back
103
104 =head1 AUTHORS
105
106 See L<Reaction::Class> for authors.
107
108 =head1 LICENSE
109
110 See L<Reaction::Class> for the license.
111
112 =cut