File Coverage

lib/Neo4j/Driver/Type/Duration.pm
Criterion Covered Total %
statement 31 31 100.0
branch 14 14 100.0
condition 14 14 100.0
subroutine 8 8 100.0
pod 4 4 100.0
total 71 71 100.0


line stmt bran cond sub pod time code
1 20     20   265 use v5.12;
  20         79  
2 20     20   121 use warnings;
  20         39  
  20         1666  
3              
4             package Neo4j::Driver::Type::Duration 1.02;
5             # ABSTRACT: Represents a Neo4j temporal duration value
6              
7              
8             # For documentation, see Neo4j::Driver::Types.
9              
10              
11 20     20   194 use parent 'Neo4j::Types::Duration';
  20         42  
  20         146  
12              
13              
14             sub _parse {
15 8     8   21 my ($self) = @_;
16            
17 8         241 my ($minus, $years, $months, $weeks, $days, $hours, $mins, $secs, $nanos) = $self->{T} =~ m/^(-)?P(?:([-0-9.]+)Y)?(?:([-0-9.]+)M)?(?:([-0-9.]+)W)?(?:([-0-9.]+)D)?(?:T(?:([-0-9.]+)H)?(?:([-0-9.]+)M)?(?:([-0-9]+)(?:[,.]([0-9]+))?S)?)?$/;
18            
19 8 100       72 my $sign = $minus ? -1 : 1;
20 8   100     68 $self->{months} = $sign * ( ($years // 0) * 12 + ($months // 0) );
      100        
21 8   100     60 $self->{days} = $sign * ( ($weeks // 0) * 7 + ($days // 0) );
      100        
22 8   100     86 $self->{seconds} = $sign * ( ($hours // 0) * 3600 + ($mins // 0) * 60 + ($secs // 0) );
      100        
      100        
23 8         22 $self->{nanoseconds} = 0;
24 8 100       31 if (defined $nanos) {
25 5         24 $nanos = sprintf '%-9s', $nanos;
26 5         18 $nanos =~ tr/ /0/;
27 5 100       35 $self->{nanoseconds} = ($secs =~ m/^-/ ? -1 : 1) * $sign * $nanos;
28             }
29             }
30              
31              
32             sub months {
33 8     8 1 7321 my ($self) = @_;
34 8 100       53 exists $self->{months} or $self->_parse;
35 8         48 return $self->{months};
36             }
37              
38              
39             sub days {
40 9     9 1 707 my ($self) = @_;
41 9 100       41 exists $self->{days} or $self->_parse;
42 9         49 return $self->{days};
43             }
44              
45              
46             sub seconds {
47 9     9 1 656 my ($self) = @_;
48 9 100       38 exists $self->{seconds} or $self->_parse;
49 9         44 return $self->{seconds};
50             }
51              
52              
53             sub nanoseconds {
54 9     9 1 717 my ($self) = @_;
55 9 100       43 exists $self->{nanoseconds} or $self->_parse;
56 9         39 return $self->{nanoseconds};
57             }
58              
59              
60             1;