File Coverage

lib/Cron/Toolkit/Utils.pm
Criterion Covered Total %
statement 16 16 100.0
branch 12 14 85.7
condition 12 17 70.5
subroutine 5 5 100.0
pod 0 2 0.0
total 45 54 83.3


line stmt bran cond sub pod time code
1             package Cron::Toolkit::Utils;
2 2     2   13 use strict;
  2         18  
  2         87  
3 2     2   12 use warnings;
  2         5  
  2         146  
4 2     2   12 use Exporter qw(import);
  2         7  
  2         1955  
5             our @EXPORT_OK = qw(
6             format_time num_to_ordinal %DOW_MAP_UNIX %DOW_MAP_QUARTZ %MONTH_MAP
7             %LIMITS %DOW_MAP_QUARTZ %MONTH_NAMES %DAY_NAMES %ALLOWED_CHARS %ALIASES
8             );
9              
10             our %EXPORT_TAGS = ( all => [@EXPORT_OK] );
11             our %MONTH_MAP = (
12             JAN => 1,
13             JANUARY => 1,
14             FEB => 2,
15             FEBRUARY => 2,
16             MAR => 3,
17             MARCH => 3,
18             APR => 4,
19             APRIL => 4,
20             MAY => 5,
21             JUN => 6,
22             JUNE => 6,
23             JUL => 7,
24             JULY => 7,
25             AUG => 8,
26             AUGUST => 8,
27             SEP => 9,
28             SEPTEMBER => 9,
29             OCT => 10,
30             OCTOBER => 10,
31             NOV => 11,
32             NOVEMBER => 11,
33             DEC => 12,
34             DECEMBER => 12
35             );
36              
37             our %DOW_MAP_QUARTZ = (
38             SUN => 1,
39             SUNDAY => 1,
40             MON => 2,
41             MONDAY => 2,
42             TUE => 3,
43             TUESDAY => 3,
44             WED => 4,
45             WEDNESDAY => 4,
46             THU => 5,
47             THURSDAY => 5,
48             FRI => 6,
49             FRIDAY => 6,
50             SAT => 7,
51             SATURDAY => 7
52             );
53              
54             our %DOW_MAP_UNIX = (
55             SUN => 7,
56             SUNDAY => 7,
57             MON => 1,
58             MONDAY => 1,
59             TUE => 2,
60             TUESDAY => 2,
61             WED => 3,
62             WEDNESDAY => 3,
63             THU => 4,
64             THURSDAY => 4,
65             FRI => 5,
66             FRIDAY => 5,
67             SAT => 6,
68             SATURDAY => 6
69             );
70              
71             our %MONTH_NAMES = (
72             1 => 'January',
73             2 => 'February',
74             3 => 'March',
75             4 => 'April',
76             5 => 'May',
77             6 => 'June',
78             7 => 'July',
79             8 => 'August',
80             9 => 'September',
81             10 => 'October',
82             11 => 'November',
83             12 => 'December'
84             );
85              
86             our %DAY_NAMES = (
87             0 => 'Sunday',
88             1 => 'Monday',
89             2 => 'Tuesday',
90             3 => 'Wednesday',
91             4 => 'Thursday',
92             5 => 'Friday',
93             6 => 'Saturday',
94             7 => 'Sunday'
95             );
96              
97             our %LIMITS = (
98             second => [ 0, 59 ],
99             minute => [ 0, 59 ],
100             hour => [ 0, 23 ],
101             dom => [ 1, 31 ],
102             month => [ 1, 12 ],
103             dow => [ 1, 7 ],
104             year => [ 1970, 2099 ],
105             );
106              
107             our %ALLOWED_CHARS = (
108             second => qr/^[0-9,\*\/\-]+$/,
109             minute => qr/^[0-9,\*\/\-]+$/,
110             hour => qr/^[0-9,\*\/\-]+$/,
111             dom => qr/^[0-9,\*\/\-?LW#]+$/,
112             dow => qr/^[0-9,\*\/\-?L#]+$/,
113             month => qr/^[0-9,\*\/\-]+$/,
114             year => qr/^[0-9,\*\/\-]+$/
115             );
116              
117             our %ALIASES = (
118             '@yearly' => '0 0 0 1 1 ? *',
119             '@annually' => '0 0 0 1 1 ? *',
120             '@monthly' => '0 0 0 L * ? *',
121             '@weekly' => '0 0 0 ? * 1 *',
122             '@daily' => '0 0 0 * * ? *',
123             '@midnight' => '0 0 0 * * ? *',
124             '@hourly' => '0 0 * * * ? *',
125             );
126              
127             sub num_to_ordinal {
128 41     41 0 95 my $n = shift;
129 41 100 66     679 return $n
    100 66        
    100 66        
130             . (
131             $n % 10 == 1 && $n != 11 ? 'st'
132             : $n % 10 == 2 && $n != 12 ? 'nd'
133             : $n % 10 == 3 && $n != 13 ? 'rd'
134             : 'th'
135             );
136             }
137              
138             sub format_time {
139 65     65 0 243 my ( $sec, $min, $hour ) = @_;
140 65 50 66     619 return "midnight" if $hour == 0 && $min == 0 && $sec == 0;
      66        
141             #return "noon" if $hour == 12 && $min == 0 && $sec == 0;
142 29 100       107 my $ampm = $hour >= 12 ? 'PM' : 'AM';
143 29   100     161 $hour = $hour % 12 || 12;
144             return
145 29 100       218 $sec ? sprintf( "%d:%02d:%02d %s", $hour, $min, $sec, $ampm )
    50          
146             : $min ? sprintf( "%d:%02d %s", $hour, $min, $ampm )
147             : "$hour $ampm";
148              
149             }
150              
151             1;