URI-cpan

 view release on metacpan or  search on metacpan

lib/URI/cpan/distfile.pm  view on Meta::CPAN

use strict;
use warnings;

package URI::cpan::distfile 1.009;
# ABSTRACT: cpan:///distfile/AUTHOR/Dist-1.234.tar.gz

use parent qw(URI::cpan);

use Carp ();
use CPAN::DistnameInfo;

#pod =head1 SYNOPSIS
#pod
#pod This URL refers to a file in an author directory on the CPAN, and expects the
#pod format AUTHOR/DISTFILE
#pod
#pod =head1 METHODS
#pod
#pod =cut

sub validate {
  my ($self) = @_;

  my (undef, undef, $author, $filename) = split m{/}, $self->path, 4;

  Carp::croak "invalid cpan URI: invalid author part in $self"
    unless $author =~ m{\A[A-Z][-0-9A-Z]*\z};
}

#pod =head1 dist_name
#pod
#pod This returns the name of the dist, like F<CGI.pm> or F<Acme-Drunk>.
#pod
#pod =cut

sub dist_name {
  my ($self) = @_;
  my $dist = CPAN::DistnameInfo->new($self->_p_rel);
  my $name = $dist->dist;

  $name =~ s/-undef$// if ! defined $dist->version;

  return $name;
}

#pod =head1 dist_version
#pod
#pod This returns the version of the dist, or undef if the version can't be found or
#pod is the string "undef"
#pod
#pod =cut

sub dist_version {
  my ($self) = @_;
  CPAN::DistnameInfo->new($self->_p_rel)->version;
}

#pod =head1 dist_filepath
#pod
#pod This returns the path to the dist file.  This is the whole URL after the
#pod C<distfile> part.
#pod
#pod =cut

sub dist_filepath {
  my ($self) = @_;
  $self->_p_rel;
}

#pod =head1 author
#pod
#pod This returns the name of the author whose file is referred to.
#pod
#pod =cut

sub author {
  my ($self) = @_;
  my ($author) = $self->_p_rel =~ m{^([A-Z]+)/};
  return $author;
}

1;

__END__



( run in 0.850 second using v1.01-cache-2.11-cpan-71847e10f99 )