App-Midgen

 view release on metacpan or  search on metacpan

lib/App/Midgen/Role/FindMinVersion.pm  view on Meta::CPAN

package App::Midgen::Role::FindMinVersion;

use constant { ONE => 1, TWO => 2, TRUE => 1, FALSE => 0,};

use Types::Standard qw( Bool );
use Moo::Role;
requires qw( ppi_document debug experimental verbose );

our $VERSION = '0.34';
$VERSION = eval $VERSION;    ## no critic

use Perl::MinimumVersion;
use Try::Tiny;
use Term::ANSIColor qw( :constants colored colorstrip );
use version;
use Data::Printer {caller_info => 1,};

has 'mro_skip' => (
	is => 'rwp',
	isa => Bool,
	lazy => 1,
	default => sub { 0; },
);


#######
# find min perl version - pmv
######
sub min_version {
	my $self     = shift;
	my $filename = shift;
	$filename =~ s{^/}{};

	my $dist_min_ver = $App::Midgen::Min_Version;
	my $object;

	try {
		$object = Perl::MinimumVersion->new($self->ppi_document);
	};

	# Find the minimum version
	try {
		$dist_min_ver
			= version->parse($dist_min_ver)
			> version->parse($object->minimum_version)
			? version->parse($dist_min_ver)
			: version->parse($object->minimum_version);
	};

	try {
		$dist_min_ver
			= version->parse($dist_min_ver)
			> version->parse($object->minimum_explicit_version)
			? version->parse($dist_min_ver)
			: version->parse($object->minimum_explicit_version);
	};

	try {
		$dist_min_ver
			= version->parse($dist_min_ver)
			> version->parse($object->minimum_syntax_version)
			? version->parse($dist_min_ver)
			: version->parse($object->minimum_syntax_version);
	};

	try {
		my $blame = $object->minimum_syntax_reason->element->content;

		if ($blame =~ m/\bmro[\s|;]/) {
			$self->_set_mro_skip(TRUE);
			print BRIGHT_BLACK
				. 'Info: PMV blame = '
				. $blame



( run in 1.453 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )