File Coverage

lib/Sisimai/Mail/Memory.pm
Criterion Covered Total %
statement 30 30 100.0
branch 6 6 100.0
condition 5 6 83.3
subroutine 6 6 100.0
pod 2 2 100.0
total 49 50 98.0


line stmt bran cond sub pod time code
1             package Sisimai::Mail::Memory;
2 4     4   56678 use feature ':5.10';
  4         26  
  4         373  
3 4     4   21 use strict;
  4         7  
  4         71  
4 4     4   16 use warnings;
  4         5  
  4         166  
5             use Class::Accessor::Lite (
6 4         29 'new' => 0,
7             'ro' => [
8             'path', # [String] Fixed string ""
9             'size', # [Integer] data size
10             ],
11             'rw' => [
12             'payload', # [Array] entire bounce mail message
13             'offset', # [Integer] Index of "data"
14             ]
15 4     4   406 );
  4         1016  
16              
17             sub new {
18             # Constructor of Sisimai::Mail::Memory
19             # @param [String] argv1 Entire email string
20             # @return [Sisimai::Mail::Memory] Object
21             # [Undef] is not a valid email text
22 7     7 1 1759 my $class = shift;
23 7   100     21 my $argv1 = shift // return undef;
24 6   100     32 my $param = {
25             'payload' => [],
26             'path' => '',
27             'size' => length $$argv1 || 0,
28             'offset' => 0,
29             };
30 6 100       16 return undef unless $param->{'size'};
31              
32 5 100 50     23 if( (substr($$argv1, 0, 5) || '') eq 'From ') {
33             # UNIX mbox
34 3         512 $param->{'payload'} = [split(/^From /m, $$argv1)];
35 3         10 shift @{ $param->{'payload'} };
  3         7  
36 3         4 $_ = 'From '.$_ for @{ $param->{'payload'} };
  3         103  
37             } else {
38 2         6 $param->{'payload'} = [$$argv1];
39             }
40 5         18 return bless($param, __PACKAGE__);
41             }
42              
43             sub read {
44             # Memory reader, works as a iterator.
45             # @return [String] Contents of a bounce mail
46 42     42 1 53985 my $self = shift;
47 42 100       51 return undef unless scalar @{ $self->{'payload'} };
  42         101  
48              
49 39         48 $self->{'offset'} += 1;
50 39         35 return shift @{ $self->{'payload'} };
  39         87  
51             }
52              
53             1;
54             __END__