# Copyright © 2010 Julian Blake Kongslie # Licensed under the BSD 3-clause license. use strict; use warnings; package Piny::Email; use Moose; use Moose::Util::TypeConstraints; use MooseX::StrictConstructor; use Email::Valid::Loose; # Types my $checker = Email::Valid::Loose->new("-fqdn" => 1, "-fudge" => 0, "-local_rules" => 0, "-mxcheck" => 1, "-tldcheck" => 0 ); subtype 'EmailAddress' => as 'Str' => where { $checker->address( $_ ) } => message { 'That does not appear to be a valid email address.' } ; # Attributes has 'address' => ( is => 'ro' , isa => 'EmailAddress' ); # Builder methods # If constructed with just one argument, then treat it as an address. around BUILDARGS => sub { my ( $orig, $class ) = ( shift, shift ); if ( @_ == 1 && ! ref $_[0] ) { return $class->$orig( address => $_[0] ); } else { return $class->$orig( @_ ); }; }; # Moose boilerplate __PACKAGE__->meta->make_immutable; 1;