File Coverage

blib/lib/MIME/Disclaimer.pm
Criterion Covered Total %
statement 29 36 80.5
branch 0 2 0.0
condition n/a
subroutine 10 12 83.3
pod 1 1 100.0
total 40 51 78.4


line stmt bran cond sub pod time code
1             package MIME::Disclaimer;
2              
3 1     1   75392 use 5.014;
  1         12  
4 1     1   4 use strict;
  1         1  
  1         31  
5 1     1   4 use warnings;
  1         2  
  1         28  
6 1     1   359 use parent -norequire, 'MIME::Signature';
  1         250  
  1         5  
7              
8 1     1   390 use MIME::Signature qw(_decoded_body _replace_body);
  1         3  
  1         62  
9 1     1   447 use Class::Method::Modifiers;
  1         1368  
  1         60  
10              
11             our $VERSION = '0.17';
12              
13 1     1   6 use constant EMPTY => '';
  1         2  
  1         121  
14 1     1   5 use constant NEWLINE => "\n";
  1         2  
  1         45  
15 1     1   5 use constant LINEBREAK => '
';
  1         2  
  1         35  
16 1     1   5 use constant HORIZONTAL_RULE => '
';
  1         2  
  1         436  
17              
18             around 'new' => sub {
19             my $orig = shift;
20             my $class = shift;
21             my %args = @_;
22             my $self = $class->$orig(%args);
23              
24             for (qw(plain_delimiter html_delimiter enriched_delimiter)) {
25             unless (exists $args{$_}) {
26             my $delimiter = ($_ eq 'html_delimiter') ? LINEBREAK . HORIZONTAL_RULE : NEWLINE;
27             $self->$_($delimiter);
28             }
29             }
30              
31             return $self;
32             };
33              
34             around 'handler_text_enriched' => sub {
35             my $orig = shift;
36             my $self = shift;
37             my $entity = shift;
38              
39             $orig->($self, $entity);
40              
41             _replace_body($entity, $self->_disclaimer('enriched') . _decoded_body($entity));
42             };
43              
44             around 'handler_text_html' => sub {
45             my $orig = shift;
46             my $self = shift;
47             my $entity = shift;
48              
49             $orig->($self, $entity);
50              
51             my $body = _decoded_body($entity);
52             require HTML::Parser;
53             my $new_body;
54             my $parser = HTML::Parser->new(
55             start_h => [
56             sub {
57             my ($text, $tagname) = @_;
58             $new_body .= $text;
59             $new_body .= $self->_disclaimer('html') if lc $tagname eq 'body';
60             },
61             'text,tagname'
62             ],
63             default_h => [sub {$new_body .= shift}, 'text'],
64             );
65             $parser->parse($body);
66             _replace_body($entity, $new_body);
67             };
68              
69             around 'handler_text_plain' => sub {
70             my $orig = shift;
71             my $self = shift;
72             my $entity = shift;
73              
74             $orig->($self, $entity);
75              
76             _replace_body($entity, $self->_disclaimer('plain') . _decoded_body($entity));
77             };
78              
79             sub _disclaimer {
80 0     0     my ($self, $type) = @_;
81              
82 0 0         defined(my $signature = $self->$type) or return;
83 0           my $delimiter_method = $type . '_delimiter';
84 0           my $delimiter = $self->$delimiter_method;
85              
86 0           return join(EMPTY, ($delimiter, $signature, $delimiter));
87             }
88              
89             sub add {
90 0     0 1   my $self = shift;
91 0           return $self->append(@_);
92             }
93              
94             1;
95              
96             __END__