use MooseX::Types -declare => [
qw(SimpleStr
NonEmptySimpleStr
+ NumericCode
LowerCaseSimpleStr
UpperCaseSimpleStr
Password
: ()
);
+subtype NumericCode,
+ as NonEmptySimpleStr,
+ where { $_ =~ m/^[0-9]+$/ },
+ message {
+ 'Must be a non-empty single line of no more than 255 chars that consists '
+ . 'of numeric characters only'
+ };
+
+coerce NumericCode,
+ from NonEmptySimpleStr,
+ via { my $code = $_; $code =~ s/[[:punct:]]//g; return $code };
+
subtype Password,
as NonEmptySimpleStr,
where { length($_) > 3 },
=back
+=item * NumericCode
+
+A Str with no new-line characters that consists of only Numeric characters.
+Examples include, Social Security Numbers, PINs, Postal Codes, HTTP Status
+Codes, etc. Supports attempting to coerce from a string that has punctuation
+in it ( e.g credit card number 4111-1111-1111-1111 ).
+
=head1 SEE ALSO
=over
use strict;
use warnings;
-use Test::More tests => 22;
+use Test::More tests => 25;
use Test::Fatal;
+use Test::Exception;
{
package FooTest;
StrongPassword
NonEmptyStr
LowerCaseStr
- UpperCaseStr),
+ UpperCaseStr
+ NumericCode
+ ),
);
has simplestr => ( is => 'rw', isa => SimpleStr );
has strongpassword => ( is => 'rw', isa => StrongPassword );
has lowercasestr => ( is => 'rw', isa => LowerCaseStr );
has uppercasestr => ( is => 'rw', isa => UpperCaseStr );
+ has numericcode => ( is => 'rw', isa => NumericCode );
}
my $ins = FooTest->new;
isnt(exception { $ins->uppercasestr('notok') }, undef, 'UpperCaseStr');
is(exception { $ins->uppercasestr('OK') }, undef, 'UpperCaseStr 2');
+
+
+is( exception { $ins->numericcode('032') }, undef, 'NumericCode lives');
+isnt( exception { $ins->numericcode('abc') }, undef, 'NumericCode dies' );
+isnt( exception { $ins->numericcode('x18') }, undef, 'mixed NumericCode dies');
use strict;
use warnings;
-use Test::More tests => 4;
+use Test::More tests => 5;
{
package FooTest;
use Moose;
- use MooseX::Types::Common::String ( qw( LowerCaseSimpleStr UpperCaseSimpleStr LowerCaseStr UpperCaseStr) );
+ use MooseX::Types::Common::String ( qw(
+ LowerCaseSimpleStr
+ UpperCaseSimpleStr
+ LowerCaseStr
+ UpperCaseStr
+ NumericCode
+ ) );
has uppercasesimplestr => ( is => 'rw', isa => UpperCaseSimpleStr, coerce => 1 );
has lowercasesimplestr => ( is => 'rw', isa => LowerCaseSimpleStr, coerce => 1 );
has uppercasestr => ( is => 'rw', isa => UpperCaseStr, coerce => 1 );
has lowercasestr => ( is => 'rw', isa => LowerCaseStr, coerce => 1 );
+ has numericcode => ( is => 'rw', isa => NumericCode, coerce => 1 );
}
my $ins = FooTest->new({
lowercasesimplestr => 'BAR',
uppercasestr => 'foo',
lowercasestr => 'BAR',
+ numericcode => '4111-1111-1111-1111',
});
is( $ins->uppercasesimplestr, 'FOO', 'uppercase str' );
is( $ins->uppercasestr, 'FOO', 'uppercase str' );
is( $ins->lowercasestr, 'bar', 'lowercase str' );
+
+is( $ins->numericcode, '4111111111111111', 'numeric code' );