CPAN-Index-API
view release on metacpan or search on metacpan
lib/CPAN/Index/API.pm view on Meta::CPAN
package CPAN::Index::API;
our $VERSION = '0.008';
use strict;
use warnings;
use Path::Class qw(dir);
use Carp qw(croak);
use Class::Load qw(load_class);
use namespace::autoclean;
use Moose;
use Moose::Util::TypeConstraints qw(find_type_constraint);
has files => (
is => 'bare',
isa => 'HashRef',
traits => ['Hash'],
handles => { files => 'values', file => 'get', file_names => 'keys' },
);
has repo_path =>
(
is => 'ro',
isa => 'Str',
);
has repo_uri =>
(
is => 'ro',
isa => 'Str',
);
sub BUILDARGS {
my ( $class, %args ) = @_;
croak "Please specifiy which files to load" unless $args{files};
my $constraint = find_type_constraint('ArrayRef[Str]');
if ( $constraint->check($args{files}) )
{
my %files;
foreach my $file ( @{ $args{files} } )
{
my $package_name = "CPAN::Index::API::File::$file";
load_class $package_name;
$files{$file} = $package_name->new(
repo_path => $args{repo_path},
repo_uri => $args{repo_uri},
);
}
$args{files} = \%files;
}
if ( $args{repo_path} and not $args{repo_uri} )
{
$args{repo_uri} = URI::file->new(
dir($args{repo_path})->absolute
)->as_string;
}
return \%args;
}
sub new_from_repo_path
{
my ($class, %args) = @_;
( run in 0.373 second using v1.01-cache-2.11-cpan-39bf76dae61 )