Badge-Depot-Plugin-Coverage

 view release on metacpan or  search on metacpan

lib/Badge/Depot/Plugin/Coverage.pm  view on Meta::CPAN

use 5.10.0;
use strict;
use warnings;
use feature qw/say/;

package Badge::Depot::Plugin::Coverage;

use Moose;
use namespace::autoclean;
use MooseX::AttributeShortcuts;
use Types::Standard qw/Str Bool Num/;
use Types::URI qw/Uri/;
use JSON::MaybeXS 'decode_json';
use Path::Tiny;
use DateTime;
use DateTime::Format::RFC3339;
with 'Badge::Depot';

# ABSTRACT: Code coverage plugin for Badge::Depot
our $AUTHORITY = 'cpan:CSSON'; # AUTHORITY
our $VERSION = '0.0102';

has coverage => (
    is => 'ro',
    isa => Num,
    required => 0,
    predicate => 1,
);
has custom_image_url => (
    is => 'ro',
    isa => Uri,
    coerce => 1,
    default => 'https://img.shields.io/badge/%s-%s-%s.svg',
);
has text => (
    is => 'ro',
    isa => Str,
    default => 'coverage',
);
has max_age => (
    is => 'ro',
    isa => 'Int',
    default => '60',
    documentation => q{Include coverage badge if the latest cover run was done less than 'max_age' minutes ago},
);


sub BUILD {
    my $self = shift;

    my $coverage = $self->determine_coverage;
    if($coverage == -1) {
        $self->log('! Could not determine coverage, skips Coverage badge');
        return;
    }

    $coverage = sprintf '%.1f', $coverage;
    my $color = $self->determine_color($coverage);
    $self->image_url(sprintf $self->custom_image_url, $self->text, $coverage.'%25', $color);
    $self->image_alt(sprintf '%s %s', $self->text, $coverage.'%');
    $self->log("Adds coverage badge ($coverage%)");
}


sub determine_coverage {
    my $self = shift;
    return $self->coverage if $self->has_coverage;

    my $log_file = path(qw/. .coverhistory.json/);



( run in 1.927 second using v1.01-cache-2.11-cpan-5837b0d9d2c )