Skip to content

Commit

Permalink
Merge pull request #339 from CPAN-API/haarg/version-parse-fix
Browse files Browse the repository at this point in the history
Fix version parsing
  • Loading branch information
oalders committed Sep 24, 2014
2 parents 8fc9ffa + cfd63fc commit 9868954
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 20 deletions.
31 changes: 18 additions & 13 deletions lib/MetaCPAN/Util.pm
Expand Up @@ -17,24 +17,29 @@ sub digest {

sub numify_version {
my $version = shift;
use warnings FATAL => 'numeric';
eval { $version = version->parse($version)->numify + 0; } or do {
$version = fix_version($version);
$version = eval { version->parse( $version || 0 )->numify + 0 };
};
$version = fix_version($version);
$version =~ s/_//g;
if ( $version =~ s/^v//i || $version =~ tr/.// > 1 ) {
my @parts = split /\./, $version;
my $n = shift @parts;
$version
= sprintf( join( '.', '%s', ( '%03s' x @parts ) ), $n, @parts );
}
$version += 0;
return $version;
}

sub fix_version {
my $version = shift;
return undef unless ( defined $version );
if ( $version =~ /^v/ ) {
eval { $version = eval( version->parse($version)->numify ) };
return $version + 0 unless ($@);
}
$version =~ s/[^\d\._]//g;
$version =~ s/_/00/g;
return $version;
return 0 unless defined $version;
my $v = ( $version =~ s/^v//i );
$version =~ s/[^\d\._].*//;
$version =~ s/\.[._]+/./;
$version =~ s/[._]*_[._]*/_/g;
$version =~ s/\.{2,}/./g;
$v ||= $version =~ tr/.// > 1;
$version ||= 0;
return ( ( $v ? 'v' : '' ) . $version );
}

sub author_dir {
Expand Down
14 changes: 7 additions & 7 deletions t/util.t
Expand Up @@ -10,15 +10,15 @@ is( MetaCPAN::Util::numify_version('v2.1.1'), 2.001001 );
is( MetaCPAN::Util::numify_version(undef), 0.000 );
is( MetaCPAN::Util::numify_version('LATEST'), 0.000 );
is( MetaCPAN::Util::numify_version('0.20_8'), 0.208 );
is( MetaCPAN::Util::numify_version('0.20_88'), 0.200088 );
is( MetaCPAN::Util::numify_version('0.208_8'), 0.208008 );
is( MetaCPAN::Util::numify_version('0.20_108'), 0.2000108 );
is( MetaCPAN::Util::numify_version('v0.9_9'), 0.009009 );
is( MetaCPAN::Util::numify_version('0.20_88'), 0.2088 );
is( MetaCPAN::Util::numify_version('0.208_8'), 0.2088 );
is( MetaCPAN::Util::numify_version('0.20_108'), 0.20108 );
is( MetaCPAN::Util::numify_version('v0.9_9'), 0.099 );

lives_ok { is( version("2a"), 2 ) };
lives_ok { is( version("V0.01"), 0.01 ) };
lives_ok { is( version('0.99_1'), '0.99001' ) };
lives_ok { is( version('0.99.01'), '0.99.01' ) };
lives_ok { is( version("V0.01"), 'v0.01' ) };
lives_ok { is( version('0.99_1'), '0.99_1' ) };
lives_ok { is( version('0.99.01'), 'v0.99.01' ) };

is( MetaCPAN::Util::strip_pod('hello L<link|http://www.google.com> foo'),
'hello link foo' );
Expand Down

0 comments on commit 9868954

Please sign in to comment.