search spec components factored out of T365
[catagits/Reaction.git] / lib / Reaction / Types / Core.pm
index cb904a3..559e48f 100644 (file)
@@ -1,48 +1,58 @@
 package Reaction::Types::Core;
 
-use Moose::Util::TypeConstraints;
+use MooseX::Types
+    -declare => [qw/SimpleStr NonEmptySimpleStr Password StrongPassword
+                    NonEmptyStr PositiveNum PositiveInt SingleDigit URI/];
 
-subtype 'SimpleStr'
-  => as 'Str'
-  => where { (length($_) <= 255) && ($_ !~ m/\n/) }
-  => message { "Must be a single line of no more than 255 chars" };
+use MooseX::Types::Moose qw/Str Num Int Object/;
 
-subtype 'NonEmptySimpleStr'
-  => as 'SimpleStr'
-  => where { length($_) > 0 }
-  => message { "Must be a non-empty single line of no more than 255 chars" };
+subtype SimpleStr,
+  as Str,
+  where { (length($_) <= 255) && ($_ !~ m/\n/) },
+  message { "Must be a single line of no more than 255 chars" };
 
-# XXX duplicating constraint msges since moose only uses last message
-
-subtype 'Password'
-  => as 'NonEmptySimpleStr'
-  => where { length($_) > 3 }
-  => message { "Must be between 4 and 255 chars" };
-
-subtype 'StrongPassword'
-  => as 'Password'
-  => where { (length($_) > 7) && (m/[^a-zA-Z]/) }
-  => message { "Must be between 8 and 255 chars, and contain a non-alpha char" };
+subtype NonEmptySimpleStr,
+  as SimpleStr,
+  where { length($_) > 0 },
+  message { "Must be a non-empty single line of no more than 255 chars" };
 
-subtype 'NonEmptyStr'
-  => as 'Str'
-  => where { length($_) > 0 }
-  => message { "Must not be empty" };
-
-subtype 'PositiveNum'
-  => as 'Num'
-  => where { $_ >= 0 }
-  => message { "Must be a positive number" };
-
-subtype 'PositiveInt'
-  => as 'Int'
-  => where { $_ >= 0 }
-  => message { "Must be a positive integer" };
+# XXX duplicating constraint msges since moose only uses last message
 
-subtype 'SingleDigit'
-  => as 'PositiveInt'
-  => where { $_ <= 9 }
-  => message { "Must be a single digit" };
+subtype Password,
+  as NonEmptySimpleStr,
+  where { length($_) > 3 },
+  message { "Must be between 4 and 255 chars" };
+
+subtype StrongPassword,
+  as Password,
+  where { (length($_) > 7) && (m/[^a-zA-Z]/) },
+  message {
+       "Must be between 8 and 255 chars, and contain a non-alpha char" };
+
+subtype NonEmptyStr,
+  as Str,
+  where { length($_) > 0 },
+  message { "Must not be empty" };
+
+subtype PositiveNum,
+  as Num,
+  where { $_ >= 0 },
+  message { "Must be a positive number" };
+
+subtype PositiveInt,
+  as Int,
+  where { $_ >= 0 },
+  message { "Must be a positive integer" };
+
+subtype SingleDigit,
+  as PositiveInt,
+  where { $_ <= 9 },
+  message { "Must be a single digit" };
+
+#message will require moose 0.39
+class_type 'URI';
+#class_type 'URI', message { 'Must be an URI object'};
+coerce 'URI', from 'Str', via { URI->new($_) };
 
 1;
 
@@ -56,7 +66,7 @@ Reaction::Types::Core
 
 Reaction uses the L<Moose> attributes as a base and adds a few of it's own.
 
-=over 
+=over
 
 =item * SimpleStr
 
@@ -82,7 +92,7 @@ Does what it says on the tin.
 
 =head1 SEE ALSO
 
-=over 
+=over
 
 =item * L<Moose::Util::TypeConstraints>