File Coverage

blib/lib/Perl/Metrics/Lite/Analysis.pm
Criterion Covered Total %
statement 56 66 84.8
branch 2 4 50.0
condition 0 2 0.0
subroutine 12 14 85.7
pod 9 9 100.0
total 79 95 83.1


line stmt bran cond sub pod time code
1             package Perl::Metrics::Lite::Analysis;
2 4     4   28 use strict;
  4         9  
  4         125  
3 4     4   33 use warnings;
  4         11  
  4         122  
4              
5 4     4   20 use Carp qw(confess);
  4         8  
  4         195  
6 4     4   1781 use Perl::Metrics::Lite::Analysis::Util;
  4         10  
  4         2384  
7              
8             our $VERSION = '0.092';
9              
10             my %_ANALYSIS_DATA = ();
11             my %_FILES = ();
12             my %_FILE_STATS = ();
13             my %_MAIN = ();
14             my %_SUBS = ();
15              
16             sub new {
17 7     7 1 2674 my ( $class, $analysis_data ) = @_;
18 7 100       36 if (!Perl::Metrics::Lite::Analysis::Util::is_ref(
19             $analysis_data, 'ARRAY'
20             )
21             )
22             {
23 1         281 confess 'Did not supply an arryref of analysis data.';
24             }
25 6         16 my $self = {};
26 6         15 bless $self, $class;
27 6         31 $self->_init($analysis_data); # Load object properties
28 6         19 return $self;
29             }
30              
31             sub files {
32 2     2 1 15 my ($self) = @_;
33 2         15 return $_FILES{$self};
34             }
35              
36             sub data {
37 9     9 1 722 my $self = shift;
38 9         50 return $_ANALYSIS_DATA{$self};
39             }
40              
41             sub file_count {
42 1     1 1 2 my $self = shift;
43 1         3 return scalar @{ $self->files };
  1         3  
44             }
45              
46             sub file_stats {
47 0     0 1 0 my $self = shift;
48 0         0 return $_FILE_STATS{$self};
49             }
50              
51             sub main_stats {
52 2     2 1 9 my $self = shift;
53 2         13 return $_MAIN{$self};
54             }
55              
56             sub subs {
57 1     1 1 3 my ($self) = @_;
58 1         6 return $_SUBS{$self};
59             }
60              
61             sub sub_stats {
62 0     0 1 0 my $self = shift;
63 0         0 my $sub_stats = {};
64 0 0       0 foreach my $sub (@{ $self->subs || []}) {
  0         0  
65 0   0     0 $sub_stats->{$sub->{path}} ||= [];
66 0         0 push @{$sub_stats->{$sub->{path}}}, $sub ;
  0         0  
67             }
68 0         0 return $sub_stats;
69             }
70              
71             sub sub_count {
72 1     1 1 3 my $self = shift;
73 1         2 return scalar @{ $self->subs };
  1         3  
74             }
75              
76             sub _init {
77 6     6   20 my ( $self, $file_objects ) = @_;
78 6         30 $_ANALYSIS_DATA{$self} = $file_objects;
79              
80 6         11 my @all_files = ();
81 6         13 my @packages = ();
82 6         12 my $lines = 0;
83 6         11 my @subs = ();
84 6         61 my @file_stats = ();
85 6         24 my %main_stats = ( lines => 0 );
86              
87 6         14 foreach my $file ( @{ $self->data() } ) {
  6         20  
88 15         52 $lines += $file->lines();
89 15         44 $main_stats{lines} += $file->main_stats()->{lines};
90 15         39 push @all_files, $file->path();
91 15         42 push @file_stats,
92             { path => $file->path, main_stats => $file->main_stats };
93 15         31 push @packages, @{ $file->packages };
  15         37  
94 15         29 push @subs, @{ $file->subs };
  15         33  
95             }
96              
97 6         23 $_FILE_STATS{$self} = \@file_stats;
98 6         13 $_FILES{$self} = \@all_files;
99 6         13 $_MAIN{$self} = \%main_stats;
100 6         20 $_SUBS{$self} = \@subs;
101 6         15 return 1;
102             }
103              
104             1;
105             __END__