File Coverage

blib/lib/File/Assets/Asset/Content.pm
Criterion Covered Total %
statement 50 50 100.0
branch 9 12 75.0
condition 11 13 84.6
subroutine 14 14 100.0
pod 0 9 0.0
total 84 98 85.7


line stmt bran cond sub pod time code
1             package File::Assets::Asset::Content;
2              
3 23     23   165 use warnings;
  23         43  
  23         783  
4 23     23   117 use strict;
  23         44  
  23         730  
5              
6 23     23   133 use Object::Tiny qw/file/;
  23         43  
  23         200  
7 23     23   3914 use File::Assets::Carp;
  23         52  
  23         146  
8 23     23   3284 use File::Assets::Util;
  23         43  
  23         10515  
9              
10             sub new {
11 108     108 0 3132 my $self = bless {}, shift;
12 108 50       475 $self->{file} = shift or croak "Can't have content without a file";
13 108         959 return $self;
14             }
15              
16             sub content {
17 164     164 0 246 my $self = shift;
18              
19 164         4194 my $file = $self->file;
20 164 50       1004 croak "Trying to get content from non-existent file ($file)" unless -e $file;
21 164 100 100     9643 if (! $self->{content} || $self->stale) {
22 54         239 local $/ = undef;
23 54         238 $self->{content} = \$file->slurp;
24 54         13586 $self->{content_mtime} = $file->stat->mtime;
25 54         12245 $self->{content_size} = length ${ $self->{content} };
  54         346  
26             }
27              
28 164         2021 return $self->{content};
29             }
30              
31             sub digest {
32 117     117 0 165 my $self = shift;
33 117   66     1191 return $self->{digest} ||= do {
34 53         354 File::Assets::Util->digest->add(${ $self->content })->hexdigest;
  53         1543  
35             }
36             }
37              
38             sub file_mtime {
39 347     347 0 449 my $self = shift;
40 347   100     8474 return (stat($self->file))[9] || 0;
41             }
42              
43             sub file_size {
44 180     180 0 282 my $self = shift;
45 180   50     4504 return (stat($self->file))[7] || 0;
46             }
47              
48             sub content_mtime {
49 181     181 0 11491 my $self = shift;
50 181 100       557 $self->content unless $self->{content};
51 181         849 return $self->{content_mtime};
52             }
53              
54             sub content_size {
55 180     180 0 10390 my $self = shift;
56 180 50       441 $self->content unless $self->{content};
57 180         1123 return $self->{content_size};
58             }
59              
60             sub refresh {
61 70     70 0 121 my $self = shift;
62 70 100       173 if ($self->stale) {
63 1         3 delete $self->{digest};
64 1         3 delete $self->{content};
65 1         3 return 1;
66             }
67 69         428 return 0;
68             }
69              
70             sub stale {
71 181     181 0 265 my $self = shift;
72             return
73 181   100     369 ($self->file_mtime > $self->content_mtime) ||
74             ($self->file_size != $self->content_size);
75             }
76              
77             1;