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.58_01'; # TRIAL
3 1     1   5 use strict;
  1         2  
  1         38  
4 1     1   6 use warnings;
  1         2  
  1         78  
5              
6 1     1   971 use Term::ANSIColor qw(:constants);
  1         8306  
  1         960  
7             $Term::ANSIColor::AUTORESET = 1;
8              
9 1     1   12 use Params::Validate qw(:all);
  1         3  
  1         879  
10              
11             # ABSTRACT: console results set
12              
13             sub new {
14 4     4 1 26 return bless { data => [] } => shift;
15             }
16              
17             sub print_bad {
18 1     1 1 2 my $self = shift;
19 1 50       6 if (-t STDOUT) {
20 0         0 print RED @_;
21             }
22             else {
23 1         6 print @_;
24             }
25             }
26              
27             sub print_good {
28 3     3 1 9 my $self = shift;
29 3 50       18 if (-t STDOUT) {
30 0         0 print GREEN @_;
31             }
32             else {
33 3         35 print @_;
34             }
35             }
36              
37             sub print($$;$) {
38 3     3 1 16 my $self = shift;
39 3         104 my ($result, $color) = validate_pos(@_, { isa => 'Ubic::Result::Class' }, { optional => 1, regex => qr/^good|bad$/ });
40              
41 3   100     45 $color ||= '';
42 3 100 66     18 if ($result->status eq 'broken' or $color eq 'bad') {
43 1         3 my $str = "$result";
44 1         7 chomp $str;
45 1         5 $self->print_bad("$str\n");
46 1         4 $self->add($result, 'bad');
47             }
48             else {
49 2         8 $self->print_good("$result\n");
50 2         11 $self->add($result, 'good');
51             }
52              
53             }
54              
55             sub add {
56 3     3 1 16 my ($self, $result, $type) = @_;
57 3   50     10 $type ||= 'good'; # is this too optimistic?
58 3         6 push @{$self->{data}}, [$result => $type];
  3         50  
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 21 my ($self, $new_code) = validate_pos(@_, 1, 0);
68 1 50       7 if (defined $new_code) {
69 0         0 $self->{exit_code} = $new_code;
70 0         0 return;
71             }
72 1 50       6 if ($self->{exit_code}) {
73 0         0 return $self->{exit_code};
74             }
75 1         3 my $data = $self->{data};
76 1         3 my $bad = grep { $_->[1] eq 'bad' } @$data;
  1         5  
77 1 50       108 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__