File Coverage

lib/Sisimai/Mail/STDIN.pm
Criterion Covered Total %
statement 27 29 93.1
branch 2 6 33.3
condition 0 3 0.0
subroutine 7 7 100.0
pod 2 2 100.0
total 38 47 80.8


line stmt bran cond sub pod time code
1             package Sisimai::Mail::STDIN;
2 3     3   79495 use v5.26;
  3         12  
3 3     3   15 use strict;
  3         5  
  3         74  
4 3     3   14 use warnings;
  3         3  
  3         201  
5 3     3   438 use IO::Handle;
  3         4820  
  3         342  
6             use Class::Accessor::Lite (
7 3         24 'new' => 0,
8             'ro' => [
9             'path', # [String] Fixed string ""
10             'size', # [Integer] Data size which has been read
11             ],
12             'rw' => [
13             'offset', # [Integer] The number of emails which have been read
14             'handle', # [IO::File] File handle
15             ]
16 3     3   382 );
  3         884  
17              
18             sub new {
19             # Constructor of Sisimai::Mail::STDIN
20             # @return [Sisimai::Mail::STDIN] Object
21 3     3 1 214574 my $class = shift;
22 3         22 my $param = {
23             'path' => '',
24             'size' => 0,
25             'offset' => 0,
26             'handle' => IO::Handle->new->fdopen(fileno(STDIN), 'r'),
27             };
28 3         310 return bless($param, __PACKAGE__);
29             }
30              
31             sub read {
32             # Mbox reader, works as an iterator.
33             # @return [String] Contents of mbox
34 1 50   1 1 2515 my $self = shift; return "" unless -T $self->{'handle'};
  1         30  
35 1         5 my $readhandle = $self->{'handle'};
36 1         1 my $readbuffer = '';
37 1         2 eval {
38 1 50       3 $readhandle = $self->{'handle'}->fdopen(fileno(STDIN), 'r') unless eof $readhandle;
39              
40 1         5 while( my $r = <$readhandle> ) {
41             # Read an email from the mailbox file
42 0 0 0     0 last if( $readbuffer && substr($r, 0, 5) eq 'From ' );
43 0         0 $readbuffer .= $r;
44             }
45             };
46 1         2 $self->{'size'} += length $readbuffer;
47 1         1 $self->{'offset'} += 1;
48 1         3 return $readbuffer;
49             }
50              
51             1;
52             __END__