File Coverage

blib/lib/Parse/Crontab/Entry/Job.pm
Criterion Covered Total %
statement 44 48 91.6
branch 11 12 91.6
condition n/a
subroutine 9 9 100.0
pod 1 1 100.0
total 65 70 92.8


line stmt bran cond sub pod time code
1             package Parse::Crontab::Entry::Job;
2 3     3   26367 use strict;
  3         5  
  3         113  
3 3     3   14 use warnings;
  3         4  
  3         80  
4 3     3   1730 use Try::Tiny;
  3         3979  
  3         174  
5              
6 3     3   676 use Mouse;
  3         36825  
  3         16  
7             extends 'Parse::Crontab::Entry';
8 3     3   2434 use Parse::Crontab::Schedule;
  3         263  
  3         272  
9              
10             has command => (
11             is => 'rw',
12             isa => 'Str',
13             );
14              
15             has schedule => (
16             is => 'rw',
17             isa => 'Parse::Crontab::Schedule',
18             handles => [qw/minute hour day month day_of_week definition user/],
19             );
20              
21             has has_user_field => (
22             is => 'ro',
23             isa => 'Bool',
24             default => undef,
25             );
26              
27 3     3   20 no Mouse;
  3         4  
  3         14  
28              
29             sub BUILD {
30 10     10 1 17 my $self = shift;
31              
32 10         30 my $line = $self->line;
33 10         12 my $definition;
34             my $command;
35 0         0 my $user;
36              
37 0         0 my %args;
38 10 100       48 if (($definition) = $line =~ /^@([^\s]+)/) {
39              
40 4 100       12 if ($self->has_user_field) {
41 1         4 ($user, $command) = (split /\s+/, $line, 3)[1,2];
42             }
43             else {
44 3         11 $command = (split /\s+/, $line, 2)[1];
45             }
46              
47 4         46 %args = (
48             definition => $definition,
49             user => $user,
50             );
51             }
52             else {
53 6 100       31 my $entity_num = $self->has_user_field ? 7 : 6;
54 6         25 my @entities = split /\s+/, $line, $entity_num;
55 6         8 my ($min, $hour, $day, $month, $dow, $com);
56              
57 6 100       15 if ($self->has_user_field) {
58 1         3 ($min, $hour, $day, $month, $dow, $user, $com) = @entities;
59             }
60             else {
61 5         10 ($min, $hour, $day, $month, $dow, $com) = @entities;
62             }
63 6 100       18 unless ($com) {
64 1         14 $self->set_error(sprintf '[%s] is not valid cron job', $self->line);
65 1         4 return;
66             }
67 5         6 $command = $com;
68 5         31 %args = (
69             minute => $min,
70             hour => $hour,
71             day => $day,
72             month => $month,
73             day_of_week => $dow,
74             user => $user,
75             );
76             }
77              
78 9 50       24 unless ($command) {
79 0         0 $self->set_error(sprintf '[%s] is not valid cron job', $self->line);
80 0         0 return;
81             }
82 9         27 $self->command($command);
83              
84             try {
85 9     9   377 $self->schedule(Parse::Crontab::Schedule->new(%args));
86              
87 8         44 my @warnings = $self->schedule->_check_warnings;
88 8         85 $self->set_warning($_) for @warnings;
89             }
90             catch {
91 1     1   97 $self->set_error(sprintf 'schedule error! %s', $_);
92 9         69 };
93              
94             }
95              
96             __PACKAGE__->meta->make_immutable;