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   29 use strict;
  4         10  
  4         121  
3 4     4   20 use warnings;
  4         9  
  4         128  
4              
5 4     4   22 use Carp qw(confess);
  4         11  
  4         219  
6 4     4   1761 use Perl::Metrics::Lite::Analysis::Util;
  4         11  
  4         2361  
7              
8             our $VERSION = '0.05';
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 43 my ( $class, $analysis_data ) = @_;
18 7 100       26 if (!Perl::Metrics::Lite::Analysis::Util::is_ref(
19             $analysis_data, 'ARRAY'
20             )
21             )
22             {
23 1         312 confess 'Did not supply an arryref of analysis data.';
24             }
25 6         19 my $self = {};
26 6         15 bless $self, $class;
27 6         29 $self->_init($analysis_data); # Load object properties
28 6         38 return $self;
29             }
30              
31             sub files {
32 2     2 1 17 my ($self) = @_;
33 2         14 return $_FILES{$self};
34             }
35              
36             sub data {
37 9     9 1 42 my $self = shift;
38 9         44 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         6  
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 4 my ($self) = @_;
58 1         7 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         25 $_ANALYSIS_DATA{$self} = $file_objects;
79              
80 6         14 my @all_files = ();
81 6         11 my @packages = ();
82 6         11 my $lines = 0;
83 6         16 my @subs = ();
84 6         11 my @file_stats = ();
85 6         25 my %main_stats = ( lines => 0 );
86              
87 6         15 foreach my $file ( @{ $self->data() } ) {
  6         20  
88 15         48 $lines += $file->lines();
89 15         54 $main_stats{lines} += $file->main_stats()->{lines};
90 15         37 push @all_files, $file->path();
91 15         39 push @file_stats,
92             { path => $file->path, main_stats => $file->main_stats };
93 15         27 push @packages, @{ $file->packages };
  15         41  
94 15         30 push @subs, @{ $file->subs };
  15         39  
95             }
96              
97 6         20 $_FILE_STATS{$self} = \@file_stats;
98 6         12 $_FILES{$self} = \@all_files;
99 6         15 $_MAIN{$self} = \%main_stats;
100 6         20 $_SUBS{$self} = \@subs;
101 6         19 return 1;
102             }
103              
104             1;
105             __END__