File Coverage

lib/Ubic/Cmd/Results.pm
Criterion Covered Total %
statement 40 56 71.4
branch 7 14 50.0
condition 5 7 71.4
subroutine 10 12 83.3
pod 8 8 100.0
total 70 97 72.1


line stmt bran cond sub pod time code
1             package Ubic::Cmd::Results;
2             $Ubic::Cmd::Results::VERSION = '1.60';
3 2     2   6 use strict;
  2         2  
  2         42  
4 2     2   5 use warnings;
  2         3  
  2         47  
5              
6 2     2   465 use Term::ANSIColor qw(:constants);
  2         4311  
  2         683  
7             $Term::ANSIColor::AUTORESET = 1;
8              
9 2     2   8 use Params::Validate qw(:all);
  2         3  
  2         1014  
10              
11             # ABSTRACT: console results set
12              
13             sub new {
14 4     4 1 24 return bless { data => [] } => shift;
15             }
16              
17             sub print_bad {
18 1     1 1 1 my $self = shift;
19 1 50       5 if (-t STDOUT) {
20 0         0 print RED @_;
21             }
22             else {
23 1         4 print @_;
24             }
25             }
26              
27             sub print_good {
28 3     3 1 7 my $self = shift;
29 3 50       9 if (-t STDOUT) {
30 0         0 print GREEN @_;
31             }
32             else {
33 3         23 print @_;
34             }
35             }
36              
37             sub print($$;$) {
38 3     3 1 13 my $self = shift;
39 3         67 my ($result, $color) = validate_pos(@_, { isa => 'Ubic::Result::Class' }, { optional => 1, regex => qr/^good|bad$/ });
40              
41 3   100     29 $color ||= '';
42 3 100 66     11 if ($result->status eq 'broken' or $color eq 'bad') {
43 1         3 my $str = "$result";
44 1         5 chomp $str;
45 1         5 $self->print_bad("$str\n");
46 1         5 $self->add($result, 'bad');
47             }
48             else {
49 2         5 $self->print_good("$result\n");
50 2         7 $self->add($result, 'good');
51             }
52              
53             }
54              
55             sub add {
56 3     3 1 7 my ($self, $result, $type) = @_;
57 3   50     10 $type ||= 'good'; # is this too optimistic?
58 3         3 push @{$self->{data}}, [$result => $type];
  3         31  
59             }
60              
61             sub results {
62 0     0 1 0 my $self = shift;
63 0         0 return map { $_->[0] } @{ $self->{data} };
  0         0  
  0         0  
64             }
65              
66             sub exit_code {
67 1     1 1 12 my ($self, $new_code) = validate_pos(@_, 1, 0);
68 1 50       3 if (defined $new_code) {
69 0         0 $self->{exit_code} = $new_code;
70 0         0 return;
71             }
72 1 50       2 if ($self->{exit_code}) {
73 0         0 return $self->{exit_code};
74             }
75 1         2 my $data = $self->{data};
76 1         2 my $bad = grep { $_->[1] eq 'bad' } @$data;
  1         4  
77 1 50       5 return ($bad ? 1 : 0);
78             }
79              
80              
81             sub finish($$) {
82 0     0 1   my $self = shift;
83 0           my $data = $self->{data};
84 0           my $bad = grep { $_->[1] eq 'bad' } @$data;
  0            
85 0 0         if (@$data > 1) {
86 0           $self->print_bad("Failed: $bad service(s)\n");
87             }
88 0           return $self->exit_code;
89             }
90              
91              
92             1;
93              
94             __END__