File Coverage

blib/lib/MooX/Value/EmailAddressCommon.pm
Criterion Covered Total %
statement 43 43 100.0
branch 8 10 80.0
condition 1 3 33.3
subroutine 10 10 100.0
pod 3 3 100.0
total 65 69 94.2


line stmt bran cond sub pod time code
1             package MooX::Value::EmailAddressCommon;
2              
3 1     1   15428 use warnings;
  1         1  
  1         23  
4 1     1   2 use strict;
  1         2  
  1         17  
5 1     1   415 use Moo;
  1         9843  
  1         4  
6 1     1   1425 use namespace::clean;
  1         7713  
  1         4  
7              
8 1     1   441 use MooX::Value::ValidationUtils;
  1         1  
  1         24  
9 1     1   255 use MooX::Value::Domain;
  1         3  
  1         394  
10              
11             our $VERSION = '0.05';
12              
13             extends 'MooX::Value';
14              
15             sub _why_invalid
16             {
17 8     8   6 my ($self, $value) = @_;
18 8 100       16 return ( __PACKAGE__ . ': undefined value', '', undef ) unless defined $value;
19 7 100       16 return ( __PACKAGE__ . ': missing domain', '', undef ) unless $value =~ tr/@//;
20              
21 6         18 my $pos = rindex( $value, '@' );
22             {
23 6         2 my $lp = substr( $value, 0, $pos );
  6         15  
24 6         13 my ($why, $long, $data) = MooX::Value::ValidationUtils::why_invalid_common_email_local_part( $lp );
25 6 100       17 return ( __PACKAGE__ . ": $why", '', undef ) if defined $why;
26             }
27              
28             {
29 4         2 my $dom = substr( $value, $pos+1 );
  4         5  
30 4         10 my ($why, $long, $data) = MooX::Value::ValidationUtils::why_invalid_domain_name( $dom );
31 4 50       8 return ( __PACKAGE__ . ": $why", '', $dom ) if defined $why;
32             }
33 4         5 return;
34             }
35              
36             sub local_part
37             {
38 1     1 1 481 my ($self) = @_;
39 1         7 return substr( $self->value, 0, rindex( $self->value, '@' ) );
40             }
41              
42             sub domain
43             {
44 2     2 1 212 my ($self) = @_;
45 2         47 return MooX::Value::Domain->new( substr( $self->value, rindex( $self->value, '@' )+1 ) );
46             }
47              
48             sub new_canonical
49             {
50 3     3 1 2378 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         5 my $pos = rindex( $value, '@' );
56 3         4 my $lp = substr( $value, 0, $pos );
57 3         4 my $dom = substr( $value, $pos+1 );
58 3         2 $dom =~ tr/A-Z/a-z/;
59 3         6 $value = "$lp\@$dom";
60             }
61 3         55 return __PACKAGE__->new( $value );
62             }
63              
64             1;
65             __END__