App-plmetrics
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/App/plmetrics.pm view on Meta::CPAN
package App::plmetrics;
use strict;
use warnings;
use Module::Path;
use Perl::Metrics::Lite;
use Statistics::Swoop;
use Text::ASCIITable;
our $VERSION = '0.06';
my %VIEWER = (
qr/^modules?$/i => sub { $_[0]->_view_module($_[1]) },
qr/^methods?$/i => sub { $_[0]->_view_methods($_[1]) },
qr/^cc$/i => sub { $_[0]->_view_cc_lines($_[1], 'cc') },
qr/^lines?$/i => sub { $_[0]->_view_cc_lines($_[1], 'lines') },
qr/^files?$/i => sub { $_[0]->_view_files($_[1]) },
);
sub new {
my ($class, $opt) = @_;
bless +{ opt => $opt } => $class;
}
sub opt { $_[0]->{opt} }
sub run {
my $self = shift;
my ($targets, $base_path) = $self->_get_targets;
my $stats = $self->_get_stats($targets, $base_path);
$self->_view($stats);
}
sub _view {
my ($self, $stats) = @_;
my $result_opt = $self->opt->{'--result'} || 'module';
for my $regex (keys %VIEWER) {
if ($result_opt =~ $regex) {
$VIEWER{$regex}->($self, $stats);
return;
}
}
print STDERR "wrong option: --result $result_opt\nsee the --help\n";
}
sub _view_cc_lines {
my ($self, $stats, $label) = @_;
print "$label\n";
my $t = Text::ASCIITable->new;
my @metrics_keys = keys %{$stats};
for my $pl ( $self->opt->{'--sort'} ? sort @metrics_keys : @metrics_keys ) {
$t->setCols($self->_header);
$t->addRow( $pl, $self->_row($stats->{$pl}{$label}) );
}
print $t. "\n";
}
sub _header { ('', qw/avg max min range sum methods/) }
sub _row {
my ($self, $list) = @_;
my $stats = Statistics::Swoop->new($list);
return( $self->_round($stats->avg), $stats->max, $stats->min,
$stats->range, $stats->sum, $stats->count );
}
sub _view_module {
my ($self, $stats) = @_;
my @metrics_keys = keys %{$stats};
for my $pl ( $self->opt->{'--sort'} ? sort @metrics_keys : @metrics_keys ) {
print "$pl\n";
my $t = Text::ASCIITable->new;
$t->setCols($self->_header);
$t->addRow( 'cc', $self->_row($stats->{$pl}{cc}) );
$t->addRow( 'lines', $self->_row($stats->{$pl}{lines}) );
print $t. "\n";
view all matches for this distributionview release on metacpan - search on metacpan
( run in 0.569 second using v1.00-cache-2.02-grep-82fe00e-cpan-1925d2aa809 )