Dist-Zilla-Plugin-RewriteVersion-Transitional

 view release on metacpan or  search on metacpan

lib/Dist/Zilla/Plugin/RewriteVersion/Transitional.pm  view on Meta::CPAN

use strict;
use warnings;
package Dist::Zilla::Plugin::RewriteVersion::Transitional; # git description: v0.008-7-g50b6f0b
# vim: set ts=8 sts=4 sw=4 tw=115 et :
# ABSTRACT: Ease the transition to [RewriteVersion] in your distribution
# KEYWORDS: plugin version rewrite munge module

our $VERSION = '0.009';

use Moose;
extends 'Dist::Zilla::Plugin::RewriteVersion';
with 'Dist::Zilla::Role::InsertVersion';

use Moose::Util::TypeConstraints 'role_type';
use Dist::Zilla::Util;
use Module::Runtime 'use_module';
use Term::ANSIColor 'colored';
use namespace::autoclean;

has fallback_version_provider => (
    is => 'ro', isa => 'Str',
    lazy => 1,
    default => sub {
        shift->log('tried to provide a version, but fallback_version_provider configuration is missing');
        return '';
    },
);

has _fallback_version_provider_args => (
    is => 'ro', isa => 'HashRef[Str]',
);

has _fallback_version_provider_obj => (
    is => 'ro',
    isa => role_type('Dist::Zilla::Role::VersionProvider'),
    lazy => 1,
    default => sub {
        my $self = shift;
        use_module(Dist::Zilla::Util->expand_config_package_name($self->fallback_version_provider))->new(
            zilla => $self->zilla,
            plugin_name => 'fallback version provider, via [RewriteVersion::Transitional]',
            %{ $self->_fallback_version_provider_args },
        );
    },
    predicate => '_using_fallback_version_provider',
);

around BUILDARGS => sub
{
    my $orig = shift;
    my $self = shift;

    my $args = $self->$orig(@_);

    my %extra_args = %$args;
    delete @extra_args{ map { $_->name } $self->meta->get_all_attributes };

    return +{ %$args, _fallback_version_provider_args => \%extra_args };
};

around dump_config => sub
{
    my ($orig, $self) = @_;
    my $config = $self->$orig;

    $config->{+__PACKAGE__} = {
        $self->_using_fallback_version_provider
            ? ( map { $_ => $self->$_ } qw(fallback_version_provider _fallback_version_provider_args) )
            : (),
        blessed($self) ne __PACKAGE__ ? ( version => $VERSION ) : (),
    };

    $config->{ $self->fallback_version_provider } = $self->_fallback_version_provider_obj->dump_config
        if $self->_using_fallback_version_provider;

    return $config;
};

around provide_version => sub
{
    my $orig = shift;
    my $self = shift;

    return if $self->can('skip_version_provider') and $self->skip_version_provider;

    my $version = $self->$orig(@_);
    return $version if defined $version;

    # if we have no fallback_version_provider, ether they forgot to set it (probably in a bundle that uses us), or
    # the version is already being provided some other way (hardcoded in dist.ini?) and we shouldn't even be here.



( run in 1.241 second using v1.01-cache-2.11-cpan-39bf76dae61 )