File Coverage

blib/lib/Bootylicious/DocumentStatLoader.pm
Criterion Covered Total %
statement 28 28 100.0
branch 7 8 87.5
condition 6 9 66.6
subroutine 6 6 100.0
pod 0 1 0.0
total 47 52 90.3


line stmt bran cond sub pod time code
1             package Bootylicious::DocumentStatLoader;
2              
3 15     15   69 use strict;
  15         25  
  15         497  
4 15     15   64 use warnings;
  15         19  
  15         397  
5              
6 15     15   64 use base 'Mojo::Base';
  15         14  
  15         1078  
7              
8 15     15   4643 use Bootylicious::Timestamp;
  15         32  
  15         120  
9              
10             require Carp;
11 15     15   9609 use File::stat;
  15         122034  
  15         120  
12              
13             my $TIMESTAMP_RE = qr/(\d\d\d\d)(\d?\d)(\d?\d)(?:T(\d\d):?(\d\d):?(\d\d))?/;
14              
15             __PACKAGE__->attr('path');
16              
17             sub load {
18 73     73 0 1173 my $self = shift;
19 73         232 my $path = $self->path;
20              
21 73 100 66     2636 Carp::croak qq/Can't load: $!/ unless $path && -e $path;
22              
23 72         924 my ($name, $format) = ($path =~ m/\/([^\/]+)\.([^.\/]+)$/);
24              
25 72 100 66     487 Carp::croak qq/Bad file $path/ unless $name && $format;
26              
27 71         213 my $filename = join '.' => $name, $format;
28              
29 71         89 my $created;
30 71 100       1084 if ($name =~ s/^($TIMESTAMP_RE)-//) {
31 67         403 $created = Bootylicious::Timestamp->new(timestamp => $1)->epoch;
32 67 50       507 return unless defined $created;
33             }
34              
35 71         303 my $modified = stat($path)->mtime;
36 71   66     12820 $created ||= $modified;
37              
38             return {
39 71         322 name => $name,
40             filename => $filename,
41             format => $format,
42             created => Bootylicious::Timestamp->new(epoch => $created),
43             modified => Bootylicious::Timestamp->new(epoch => $modified)
44             };
45             }
46              
47             1;