File Coverage

blib/lib/Command/Run/Tmpfile.pm
Criterion Covered Total %
statement 53 54 98.1
branch 5 10 50.0
condition n/a
subroutine 17 17 100.0
pod 8 8 100.0
total 83 89 93.2


line stmt bran cond sub pod time code
1             package Command::Run::Tmpfile;
2              
3 29     29   501077 use v5.14;
  29         147  
4 29     29   385 use warnings;
  29         81  
  29         1964  
5 29     29   1496 use utf8;
  29         776  
  29         212  
6 29     29   1439 use Carp;
  29         59  
  29         3272  
7 29     29   215 use Fcntl;
  29         43  
  29         7829  
8 29     29   1417 use IO::File;
  29         23312  
  29         8387  
9 29     29   254 use IO::Handle;
  29         49  
  29         5144  
10              
11             my $fdpath;
12             BEGIN {
13             $fdpath = sub {
14 29         268 for my $path (qw(/dev/fd /proc/self/fd)) {
15 29 50       19775 -r "$path/0" and return $path;
16             }
17 0         0 undef;
18 29     29   296 }->();
19             }
20              
21             sub new {
22 191     191 1 237459 my $class = shift;
23 191 50       71906 my $fh = new_tmpfile IO::File or die "new_tmpfile: $!\n";
24 191 50       3044 $fh->fcntl(F_SETFD, 0) or die "fcntl F_SETFD: $!\n";
25 191     28   7338 binmode $fh, ':encoding(utf8)';
  28         24381  
  28         638  
  28         198  
26 191         42279 bless { FH => $fh }, $class;
27             }
28              
29             sub write {
30 3     3 1 1058 my $obj = shift;
31 3         11 my $fh = $obj->fh;
32 3 50       26 if (@_) {
33 3         12 my $data = join '', @_;
34 3         22 $fh->print($data);
35             }
36 3         37 $obj;
37             }
38              
39             sub flush {
40 2     2 1 5 my $obj = shift;
41 2         7 $obj->fh->flush;
42 2         25 $obj;
43             }
44              
45             sub rewind {
46 3     3 1 7 my $obj = shift;
47 3 50       11 $obj->fh->seek(0, 0) or die "seek: $!\n";
48 3         70 $obj;
49             }
50              
51             sub reset {
52 1     1 1 1220 my $obj = shift;
53 1         6 $obj->rewind;
54 1         5 $obj->fh->truncate(0);
55 1         141 $obj;
56             }
57              
58             sub fh {
59 174     174 1 1933 my $obj = shift;
60 174         1682 $obj->{FH};
61             }
62              
63             sub fd {
64 11     11 1 502 my $obj = shift;
65 11         114 $obj->fh->fileno;
66             }
67              
68             sub path {
69 9     9 1 1446 my $obj = shift;
70 9         509 sprintf "$fdpath/%d", $obj->fd;
71             }
72              
73             1;
74              
75             __END__