File Coverage

lib/Mail/DMARC/Report/Aggregate/Record/Auth_Results/DKIM.pm
Criterion Covered Total %
statement 35 37 94.5
branch 14 22 63.6
condition n/a
subroutine 10 10 100.0
pod 0 6 0.0
total 59 75 78.6


line stmt bran cond sub pod time code
1             package Mail::DMARC::Report::Aggregate::Record::Auth_Results::DKIM;
2             our $VERSION = '1.20230215';
3 13     13   96 use strict;
  13         39  
  13         420  
4              
5 13     13   71 use Carp;
  13         31  
  13         7081  
6              
7             sub new {
8 55     55 0 164 my ( $class, @args ) = @_;
9              
10 55 50       180 croak "missing arguments" if 0 == scalar @args;
11              
12 55         145 my $self = bless {}, $class;
13              
14             # a bare hash
15 55 100       158 return $self->_from_hash(@args) if scalar @args > 1;
16              
17 49         99 my $dkim = shift @args;
18 49 50       142 croak "dkim argument not a ref" if ! ref $dkim;
19              
20 49 100       186 return $dkim if ref $dkim eq $class; # been here before...
21              
22 44 50       671 return $self->_from_hashref($dkim) if 'HASH' eq ref $dkim;
23              
24 0         0 croak "invalid dkim argument";
25             }
26              
27             sub domain {
28 48 50   48 0 145 return $_[0]->{domain} if 1 == scalar @_;
29 48         145 return $_[0]->{domain} = $_[1];
30             }
31              
32             sub selector {
33 44 50   44 0 132 return $_[0]->{selector} if 1 == scalar @_;
34 44         113 return $_[0]->{selector} = $_[1];
35             }
36              
37             sub result {
38 49 50   49 0 129 return $_[0]->{result} if 1 == scalar @_;
39 49 100       106 croak "invalid DKIM result" if ! grep { $_ eq $_[1] }
  343         904  
40             qw/ pass fail neutral none permerror policy temperror /;
41 48         168 return $_[0]->{result} = $_[1];
42             }
43              
44             sub human_result {
45 36 50   36 0 138 return $_[0]->{human_result} if 1 == scalar @_;
46 36         104 return $_[0]->{human_result} = $_[1];
47             }
48              
49             sub _from_hash {
50 50     50   205 my ($self, %args) = @_;
51              
52 50         178 foreach my $key ( keys %args ) {
53 178         512 $self->$key( $args{$key} );
54             }
55              
56 48         165 $self->is_valid;
57 48         226 return $self;
58             }
59              
60             sub _from_hashref {
61 44     44   87 return $_[0]->_from_hash(%{ $_[1] });
  44         211  
62             }
63              
64             sub is_valid {
65 48     48 0 101 my $self = shift;
66              
67 48         143 foreach my $f (qw/ domain result /) {
68 96 50       309 if ( ! defined $self->{$f} ) {
69 0         0 croak "DKIM value $f is required!";
70             }
71             }
72 48         83 return;
73             }
74              
75             1;
76              
77             __END__