Analizo
view release on metacpan or search on metacpan
lib/Analizo/GlobalMetrics.pm view on Meta::CPAN
package Analizo::GlobalMetrics;
use strict;
use parent qw(Class::Accessor::Fast);
use Analizo::GlobalMetric::TotalAbstractClasses;
use Analizo::GlobalMetric::MethodsPerAbstractClass;
use Analizo::GlobalMetric::ChangeCost;
use Statistics::Descriptive;
__PACKAGE__->mk_accessors(qw(
model
calculators
metric_report
values_lists
module_metrics_list
));
sub new {
my ($package, %args) = @_;
my @instance_variables = (
model => $args{model},
calculators => _initialize_calculators($args{model}),
metric_report => _initialize_metric_report(),
values_lists => {},
);
return bless { @instance_variables }, $package;
}
sub _initialize_calculators {
my ($model) = @_;
my %calculators = (
total_abstract_classes => Analizo::GlobalMetric::TotalAbstractClasses->new(model => $model),
total_methods_per_abstract_class => Analizo::GlobalMetric::MethodsPerAbstractClass->new(model => $model),
change_cost => Analizo::GlobalMetric::ChangeCost->new(model => $model),
);
return \%calculators;
}
sub _initialize_metric_report {
my %metric_report = (
total_modules => 0,
total_modules_with_defined_methods => 0,
total_modules_with_defined_attributes => 0,
total_nom => 0,
total_loc => 0,
total_cof => 0
);
return \%metric_report;
}
sub list {
my ($self) = @_;
my %list = (
total_cof => "Total Coupling Factor",
total_modules => "Total Number of Modules",
total_nom => "Total Number of Methods",
total_loc => "Total Lines of Code",
total_modules_with_defined_methods => "Total number of modules with at least one defined method",
total_modules_with_defined_attributes => "Total number of modules with at least one defined attributes"
);
for my $metric (keys %{$self->calculators}) {
$list{$metric} = $self->calculators->{$metric}->description;
}
return %list;
}
sub add_module_values {
my ($self, $values) = @_;
$self->_update_metric_report($values);
$self->_add_values_to_values_lists($values);
}
sub _update_metric_report {
my ($self, $values) = @_;
$self->metric_report->{'total_modules'} += 1;
$self->metric_report->{'total_modules_with_defined_methods'} += 1 if $values->{'nom'} > 0;
$self->metric_report->{'total_modules_with_defined_attributes'} += 1 if $values->{'noa'} > 0;
$self->metric_report->{'total_nom'} += $values->{'nom'};
$self->metric_report->{'total_loc'} += $values->{'loc'};
}
sub _add_values_to_values_lists {
my ($self, $values) = @_;
for my $metric (keys %{$values}) {
$self->_add_metric_value_to_values_list($metric, $values->{$metric});
( run in 0.686 second using v1.01-cache-2.11-cpan-5735350b133 )