aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.PL1
-rw-r--r--lib/Reaction/Types/CreditCard.pm44
2 files changed, 45 insertions, 0 deletions
diff --git a/Makefile.PL b/Makefile.PL
index d4def09..b73726c 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -31,6 +31,7 @@ requires 'Email::MIME::Creator';
requires 'Text::CSV_XS';
requires 'Devel::Declare' => '0.001006';
requires 'MooseX::Types' => '0.04';
+requires 'Business::CreditCard' => '0.30';
catalyst;
diff --git a/lib/Reaction/Types/CreditCard.pm b/lib/Reaction/Types/CreditCard.pm
new file mode 100644
index 0000000..ec7de56
--- /dev/null
+++ b/lib/Reaction/Types/CreditCard.pm
@@ -0,0 +1,44 @@
+package Reaction::Types::CreditCard;
+
+use MooseX::Types
+ -declare => [qw/CardNumber/];
+
+use Reaction::Types::Core 'NonEmptySimpleStr';
+use Business::CreditCard;
+
+subtype 'CardNumber'
+ => as 'NonEmptySimpleStr'
+ => where { Business::CreditCard->validate($_) }
+ => message {"Must be a valid card number"};
+
+1;
+
+=head1 NAME
+
+Reaction::Types::CreditCard
+
+=head1 DESCRIPTION
+
+=over
+
+=item * CardNumber
+
+=back
+
+=head1 SEE ALSO
+
+=over
+
+=item * L<Reaction::Types::Core>
+
+=back
+
+=head1 AUTHORS
+
+See L<Reaction::Class> for authors.
+
+=head1 LICENSE
+
+See L<Reaction::Class> for the license.
+
+=cut