package Analizo::GlobalMetric::MethodsPerAbstractClass;
use strict;
use parent qw(Class::Accessor::Fast);

__PACKAGE__->mk_accessors(qw( model));

sub new {
  my ($package, %args) = @_;
   my @instance_variables = (
    model => $args{model},
  );
  return bless { @instance_variables }, $package;
}

sub description {
  return "Methods per Abstract Class";
}

sub calculate {
  my ($self) = @_;
  my $total_number_of_methods = 0;
  my @abstract_classes = $self->model->abstract_classes;

  for my $abstract_class (@abstract_classes) {
    $total_number_of_methods += (scalar $self->model->functions($abstract_class)) || 0;
  }
  return _division($total_number_of_methods, scalar @abstract_classes);
}

sub _division {
  my ($dividend, $divisor) = @_;
  return ($divisor > 0) ? ($dividend / $divisor) : 0;
}

1;