File Coverage

blib/lib/MooX/Value/EmailAddress.pm
Criterion Covered Total %
statement 43 43 100.0
branch 7 10 70.0
condition 1 3 33.3
subroutine 10 10 100.0
pod 3 3 100.0
total 64 69 92.7


line stmt bran cond sub pod time code
1             package MooX::Value::EmailAddress;
2              
3 1     1   15445 use warnings;
  1         2  
  1         21  
4 1     1   3 use strict;
  1         1  
  1         19  
5 1     1   396 use Moo;
  1         9099  
  1         3  
6 1     1   1340 use namespace::clean;
  1         7495  
  1         5  
7              
8 1     1   432 use MooX::Value::ValidationUtils;
  1         2  
  1         22  
9 1     1   291 use MooX::Value::Domain;
  1         2  
  1         342  
10              
11             our $VERSION = '0.05';
12              
13             extends 'MooX::Value';
14              
15             sub _why_invalid
16             {
17 8     8   8 my ($self, $value) = @_;
18 8 100       17 return ( __PACKAGE__ . ': undefined value', '', undef ) unless defined $value;
19 7 100       16 return ( __PACKAGE__ . ': missing domain', '', undef ) unless $value =~ tr/@//;
20              
21 6         9 my $pos = rindex( $value, '@' );
22             {
23 6         5 my $lp = substr( $value, 0, $pos );
  6         6  
24 6         14 my ($why, $long, $data) = MooX::Value::ValidationUtils::why_invalid_email_local_part( $lp );
25 6 50       9 return ( __PACKAGE__ . ": $why", '', undef ) if defined $why;
26             }
27              
28             {
29 6         5 my $dom = substr( $value, $pos+1 );
  6         8  
30 6         13 my ($why, $long, $data) = MooX::Value::ValidationUtils::why_invalid_domain_name( $dom );
31 6 50       18 return ( __PACKAGE__ . ": $why", '', $dom ) if defined $why;
32             }
33 6         8 return;
34             }
35              
36             sub local_part
37             {
38 2     2 1 1096 my ($self) = @_;
39 2         11 return substr( $self->value, 0, rindex( $self->value, '@' ) );
40             }
41              
42             sub domain
43             {
44 4     4 1 451 my ($self) = @_;
45 4         88 return MooX::Value::Domain->new( substr( $self->value, rindex( $self->value, '@' )+1 ) );
46             }
47              
48             sub new_canonical
49             {
50 3     3 1 3226 my ($class, $value) = @_;
51              
52             # Canonicalize if possible. If not, let normal validation proceed.
53 3 50 33     14 if( defined $value and $value =~ tr/@// )
54             {
55 3         4 my $pos = rindex( $value, '@' );
56 3         4 my $lp = substr( $value, 0, $pos );
57 3         5 my $dom = substr( $value, $pos+1 );
58 3         3 $dom =~ tr/A-Z/a-z/;
59 3         6 $value = "$lp\@$dom";
60             }
61 3         59 return __PACKAGE__->new( $value );
62             }
63              
64             1;
65             __END__