File Coverage

blib/lib/Mail/Message/Replace/MailHeader.pm
Criterion Covered Total %
statement 16 94 17.0
branch 0 32 0.0
condition 0 14 0.0
subroutine 6 30 20.0
pod 22 23 95.6
total 44 193 22.8


line stmt bran cond sub pod time code
1             # This code is part of Perl distribution Mail-Message version 4.04.
2             # The POD got stripped from this file by OODoc version 3.06.
3             # For contributors see file ChangeLog.
4              
5             # This software is copyright (c) 2001-2026 by Mark Overmeer.
6              
7             # This is free software; you can redistribute it and/or modify it under
8             # the same terms as the Perl 5 programming language system itself.
9             # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later
10              
11              
12             package Mail::Message::Replace::MailHeader;{
13             our $VERSION = '4.04';
14             }
15              
16 1     1   14551 use parent 'Mail::Message::Head::Complete';
  1         4  
  1         12  
17              
18 1     1   160 use strict;
  1         3  
  1         39  
19 1     1   8 use warnings;
  1         2  
  1         113  
20              
21 1     1   8 use Log::Report 'mail-message', import => [ qw/__x error panic/ ];
  1         3  
  1         14  
22              
23             #--------------------
24              
25             sub new(@)
26 0     0 1   { my $class = shift;
27 0 0         unshift @_, 'raw_data' if @_ % 2;
28 0           $class->SUPER::new(@_);
29             }
30              
31             sub init($)
32 0     0 0   { my ($self, $args) = @_;
33 0           $self->SUPER::init($args);
34              
35 0   0       $self->modify($args->{Modify} || $args->{Reformat} || 0);
36 0   0       $self->fold_length($args->{FoldLength} || 79);
37 0   0       $self->mail_from($args->{MailFrom} || 'KEEP');
38 0           $self;
39             }
40              
41             #--------------------
42              
43             sub delete($;$)
44 0     0 1   { my ($self, $tag) = (shift, shift);
45 0 0         @_ or return $self->delete($tag);
46              
47 0           my $index = shift;
48 0           my @fields = $self->get($tag);
49 0           my ($field) = splice @fields, $index, 1;
50 0           $self->reset($tag, @fields);
51 0           $field;
52             }
53              
54              
55             sub add($$)
56 0     0 1   { my $self = shift;
57 0           my $field = $self->add(shift);
58 0           $field->unfoldedBody;
59             }
60              
61              
62             sub replace($$;$)
63 0     0 1   { my ($self, $tag, $line, $index) = @_;
64 0 0 0       $tag //= $line =~ s/^([^:]+)\:\s*// ? $1 : 'MISSING';
65              
66 0           my $field = Mail::Message::Field::Fast->new($tag, $line);
67 0           my @fields = $self->get($tag);
68 0   0       $fields[ $index||0 ] = $field;
69 0           $self->reset($tag, @fields);
70              
71 0           $field;
72             }
73              
74             #--------------------
75              
76             sub get($;$)
77 0     0 1   { my $head = shift->head;
78 0           my @ret = map $head->get(@_), @_;
79              
80 0 0         wantarray ? (map $_->unfoldedBody, @ret)
    0          
81             : @ret ? $ret[0]->unfoldedBody
82             : undef;
83             }
84              
85             #--------------------
86              
87             sub modify(;$)
88 0     0 1   { my $self = shift;
89 0 0         @_ ? ($self->{MH_refold} = shift) : $self->{MH_refold};
90             }
91              
92              
93             sub mail_from(;$)
94 0     0 1   { my $self = shift;
95 0 0         @_ or return $self->{MH_mail_from};
96              
97 0           my $choice = uc(shift);
98 0 0         $choice =~ /^(IGNORE|ERROR|COERCE|KEEP)$/
99             or error __x"bad Mail-From choice: '{pick}'.", pick => $choice;
100              
101 0           $self->{MH_mail_from} = $choice;
102             }
103              
104              
105             sub fold(;$)
106 0     0 1   { my $self = shift;
107 0 0         my $wrap = @_ ? shift : $self->fold_length;
108 0           $_->setWrapLength($wrap) for $self->orderedFields;
109 0           $self;
110             }
111              
112              
113             sub unfold(;$)
114 0     0 1   { my $self = shift;
115 0 0         my @fields = @_ ? $self->get(shift) : $self->orderedFields;
116 0           $_->setWrapLength(100_000) for @fields; # blunt approach
117 0           $self;
118             }
119              
120              
121             sub extract($)
122 0     0 1   { my ($self, $lines) = @_;
123              
124 0           my $parser = Mail::Box::Parser::Perl->new(filename => 'extract from array', data => $lines, trusted => 1);
125 0           $self->read($parser);
126 0           $parser->close;
127              
128             # Remove header from array
129 0   0       shift @$lines while @$lines && $lines->[0] != m/^[\r\n]+/;
130 0 0         shift @$lines if @$lines;
131 0           $self;
132             }
133              
134              
135             sub read($)
136 0     0 1   { my ($self, $file) = @_;
137 0           my $parser = Mail::Box::Parser::Perl->new(filename => ('from file-handle '.ref $file), file => $file, trusted => 1);
138 0           $self->read($parser);
139 0           $parser->close;
140 0           $self;
141             }
142              
143              
144 0     0 1   sub empty() { $_[0]->removeFields( m/^/ ) }
145              
146              
147             sub header(;$)
148 0     0 1   { my $self = shift;
149 0 0         $self->extract(shift) if @_;
150 0 0         $self->fold if $self->modify;
151 0           [ $self->orderedFields ];
152             }
153              
154              
155 0     0 1   sub header_hashref($) { panic "Don't use header_hashref!!!" }
156              
157              
158 0     0 1   sub combine($;$) { panic "Don't use combine()!!!" }
159              
160              
161 0     0 1   sub exists() { $_[0]->count }
162              
163              
164 0     0 1   sub as_string() { $_[0]->string }
165              
166              
167             sub fold_length(;$$)
168 0     0 1   { my $self = shift;
169 0 0         @_ or return $self->{MH_wrap};
170              
171 0           my $old = $self->{MH_wrap};
172 0           my $wrap = $self->{MH_wrap} = shift;
173 0 0         $self->fold($wrap) if $self->modify;
174 0           $old;
175             }
176              
177              
178 0     0 1   sub tags() { $_[0]->names }
179              
180              
181 0     0 1   sub dup() { $_[0]->clone }
182              
183              
184 0     0 1   sub cleanup() { $_[0] }
185              
186             #--------------------
187              
188             BEGIN
189 1     1   1983 { no warnings;
  1         2  
  1         130  
190             *Mail::Header::new = sub {
191 0     0     my $class = shift;
192 0           Mail::Message::Replace::MailHeader->new(@_);
193 1     1   103 };
194             }
195              
196              
197              
198             sub isa($)
199 0     0 1   { my ($thing, $class) = @_;
200 0 0         $class eq 'Mail::Mailer' ? 1 : $thing->SUPER::isa($class);
201             }
202              
203              
204             1;