File Coverage

blib/lib/Daiku/Task.pm
Criterion Covered Total %
statement 35 36 97.2
branch 3 4 75.0
condition n/a
subroutine 9 9 100.0
pod 1 2 50.0
total 48 51 94.1


line stmt bran cond sub pod time code
1 20     20   16030 use strict;
  20         27  
  20         692  
2 20     20   73 use warnings FATAL => 'recursion';
  20         31  
  20         540  
3 20     20   70 use utf8;
  20         121  
  20         103  
4              
5             # This is .PHONY target.
6             package Daiku::Task;
7 20     20   8742 use File::stat;
  20         101923  
  20         156  
8 20     20   8916 use Mouse;
  20         365113  
  20         99  
9              
10             with 'Daiku::Role';
11              
12             has dst => (
13             is => 'rw',
14             isa => 'Str',
15             required => 1,
16             );
17             has deps => (
18             is => 'rw',
19             isa => 'ArrayRef[Str]',
20             default => sub { +[ ] },
21             );
22             has code => (
23             is => 'rw',
24             isa => 'CodeRef',
25             default => sub {
26             sub { }
27             },
28             );
29             has desc => (
30             is => 'ro',
31             isa => 'Maybe[Str]',
32             );
33              
34             # @return affected things
35             sub build {
36 21     21 1 48 my ($self, $target, @args) = @_;
37 21         101 $self->log("Building Task: $self->{dst}");
38              
39 21         68 my $built = $self->_build_deps();
40              
41 21         85 $self->code->($self, @args);
42 20         5649 $built++;
43              
44 20         80 return $built;
45             }
46              
47             sub match {
48 207     207 0 972 my ($self, $target) = @_;
49 207 100       644 return 1 if $self->dst eq $target;
50 177         430 return 0;
51             }
52              
53             # @return the number of built tasks
54             sub _build_deps {
55 21     21   31 my ($self) = @_;
56              
57 21         27 my $ret = 0;
58 21         26 for my $target (@{$self->deps}) {
  21         74  
59 9         43 my $task = $self->registry->find_task($target);
60 9 50       30 if ($task) {
61 9         25 $ret += $task->build($target);
62             } else {
63 0         0 die "I don't know to build '$target' depended by '$self->{dst}'\n";
64             }
65             }
66 21         36 return $ret;
67             }
68              
69 20     20   11211 no Mouse;
  20         129  
  20         83  
70             __PACKAGE__->meta->make_immutable;
71              
72             1;
73             __END__