File Coverage

lib/Cron/Toolkit/Pattern/Range.pm
Criterion Covered Total %
statement 24 24 100.0
branch 2 2 100.0
condition 11 11 100.0
subroutine 7 7 100.0
pod 0 4 0.0
total 44 48 91.6


line stmt bran cond sub pod time code
1             package Cron::Toolkit::Pattern::Range;
2 2     2   41 use strict;
  2         5  
  2         77  
3 2     2   10 use warnings;
  2         4  
  2         163  
4 2     2   13 use parent 'Cron::Toolkit::Pattern';
  2         2  
  2         18  
5              
6             sub new {
7 20     20 0 67 my ($class, %args) = @_;
8 20         94 my $self = $class->SUPER::new(%args);
9 20   100     108 $self->{wrapped} = $args{wrapped} // 0;
10 20         67 return $self;
11             }
12              
13             sub type {
14 1642     1642 0 4208 return 'range';
15             }
16              
17             sub match {
18 1147     1147 0 2262 my ($self, $value, $tm) = @_;
19 1147         2997 my $min = $self->{children}[0]{value};
20 1147         2323 my $max = $self->{children}[1]{value};
21 1147 100 100     2283 if ($self->field_type eq 'dow' && $self->{wrapped}) {
22             # Wrapped range: e.g. 6-2 = 6,7,1,2
23 20   100     131 return $value >= $min || $value <= $max;
24             }
25 1127   100     6385 return $value >= $min && $value <= $max;
26             }
27              
28             sub to_english {
29 17     17 0 44 my ($self) = @_;
30 17         60 my $from = $self->{children}[0]->english_value;
31 17         41 my $to = $self->{children}[1]->english_value;
32 17         53 return "every " . $self->english_unit . " from $from to $to";
33             }
34              
35             1;