Acme-CPANAuthors
view release on metacpan or search on metacpan
lib/Acme/CPANAuthors.pm view on Meta::CPAN
};
}
}
}
return @found;
}
sub _list_categories {
require Module::Find;
return grep { $_ !~ /^(?:Register|Utils|Not|Search|Factory)$/ }
map { s/^Acme::CPANAuthors:://; $_ }
Module::Find::findsubmod( 'Acme::CPANAuthors' );
}
sub _get_authors_of {
my $category = shift;
$category =~ s/^Acme::CPANAuthors:://;
return if $category =~ /^(?:Register|Utils|Search)$/;
lib/Acme/CPANAuthors/Factory.pm view on Meta::CPAN
package Acme::CPANAuthors::Factory;
use strict;
use warnings;
use Acme::CPANAuthors;
sub create {
my ($class, %data) = @_;
my @categories = keys %data;
my %authors = map { %{ $data{$_} } } @categories;
return bless {
categories => \@categories,
authors => \%authors,
}, 'Acme::CPANAuthors';
}
1;
__END__
lib/Acme/CPANAuthors/Utils/Authors.pm view on Meta::CPAN
package Acme::CPANAuthors::Utils::Authors;
use strict;
use warnings;
use base 'Acme::CPANAuthors::Utils::CPANIndex';
sub _mappings {+{author => 'authors'}}
sub _parse {
my ($self, $file) = @_;
my $handle = $self->_handle($file);
while (my $line = $handle->getline) {
$line =~ s/\r?\n$//;
my ($alias, $pauseid, $long) = split ' ', $line, 3;
$long =~ s/^"//;
lib/Acme/CPANAuthors/Utils/CPANIndex.pm view on Meta::CPAN
use strict;
use warnings;
use Carp;
sub new {
my $class = shift;
my $self = bless { preambles => {} }, $class;
$self->_install_methods;
$self->{$_} = {} for keys %{ $self->_mappings };
$self->_parse(@_) if @_;
$self;
}
sub _mappings {+{}}
sub _preambles {}
sub _install_methods {
my $self = shift;
my $class = ref $self;
no strict 'refs';
no warnings 'redefine';
for my $method ($self->_preambles) {
*{"$class\::$method"} = sub {
my $self = shift;
$self->{preambles}{$method};
}
}
for my $method (keys %{ $self->_mappings }) {
my $key = $self->_mappings->{$method};
*{"$class\::$method"} = sub {
my ($self, $name) = @_;
$self->{$key}{$name};
};
*{"$class\::${method}s"} = sub {
my $self = shift;
values %{ $self->{$key} };
};
*{"$class\::${method}_count"} = sub {
my $self = shift;
lib/Acme/CPANAuthors/Utils/Packages.pm view on Meta::CPAN
use warnings;
use CPAN::DistnameInfo;
use version;
use base 'Acme::CPANAuthors::Utils::CPANIndex';
sub _preambles {qw(
file url description columns intended_for
written_by line_count last_updated
)}
sub _mappings {+{
package => 'packages',
distribution => 'dists',
latest_distribution => 'latest_dists',
}}
sub _parse {
my ($self, $file) = @_;
my $handle = $self->_handle($file);
t/02_standalone.t view on Meta::CPAN
use strict;
use warnings;
use lib 't/lib';
use Test::More 0.88;
use Acme::CPANAuthors::Test;
my %authors = Acme::CPANAuthors::Test->authors;
is(keys(%authors), 1, 'one author');
is(Acme::CPANAuthors::Test->authors->{ISHIGAKI}, 'Kenichi Ishigaki', 'id -> name mapping');
foreach my $name ( keys %{ Acme::CPANAuthors::Test->authors } ) {
is($authors{$name}, Acme::CPANAuthors::Test->authors->{$name}, 'all mappings');
}
is(Acme::CPANAuthors::Test->category, 'Test', 'category');
done_testing;
t/06_parse_mailrc.t view on Meta::CPAN
is( $a->name, "Arnaud 'Arhuman' Assad" );
is( $a->email, 'arhuman@hotmail.com' );
$a = $p->author('AJOHNSON');
isa_ok( $a, 'Acme::CPANAuthors::Utils::Authors::Author' );
is( $a->pauseid, 'AJOHNSON' );
is( $a->name, 'Andrew L. Johnson' );
is( $a->email, 'andrew-johnson@shaw.ca' );
is_deeply(
[ sort map { $_->pauseid } $p->authors ],
[ qw(AADLER AALLAN
AANZLOVAR AAR AARDEN AARONJJ AARONSCA AASSAD ABARCLAY AJOHNSON)
]
);
}
t/07_parse_packages.t view on Meta::CPAN
# this test is ripped from Parse::CPAN::Packages
use strict;
use warnings;
use Test::More tests => 34;
use_ok("Acme::CPANAuthors::Utils::Packages");
my $p = Acme::CPANAuthors::Utils::Packages->new("t/data/modules/02packages.details.txt");
isa_ok( $p, "Acme::CPANAuthors::Utils::Packages" );
my @packages = sort map { $_->package } $p->packages;
is_deeply(
\@packages,
[ qw(Acme::Colour Acme::Colour::Old Acme::ComeFrom Acme::Comment Acme::CramCode Acme::Currency accessors accessors::chained accessors::classic )
]
);
is( $p->file, '02packages.details.txt', 'file' );
is( $p->url, 'http://www.perl.com/CPAN/modules/02packages.details.txt',
'url' );
is( $p->description, 'Package names found in directory $CPAN/authors/id/',
t/07_parse_packages.t view on Meta::CPAN
);
my $dist = $p->distribution('S/SP/SPURKIS/accessors-0.02.tar.gz');
is( $dist->dist, 'accessors' );
is( $dist,
$p->package("accessors::chained")->distribution,
"by path match by name"
);
is_deeply(
[ map { $_->package } $dist->contains ],
[qw( accessors accessors::chained accessors::classic )],
"dist contains packages"
);
$d = $p->latest_distribution("Acme-Colour");
is( $d->prefix, "L/LB/LBROCARD/Acme-Colour-1.00.tar.gz" );
is( $d->version, "1.00" );
is_deeply(
[ sort map { $_->prefix } $p->latest_distributions ],
[ 'A/AU/AUTRIJUS/Acme-ComeFrom-0.07.tar.gz',
'K/KA/KANE/Acme-Comment-1.02.tar.gz',
'L/LB/LBROCARD/Acme-Colour-1.00.tar.gz',
'S/SM/SMUELLER/Acme-Currency-0.01.tar.gz',
'S/SP/SPURKIS/accessors-0.02.tar.gz',
'X/XE/XERN/Acme-CramCode-0.01.tar.gz',
]
);
# counts
t/07_parse_packages.t view on Meta::CPAN
#open( IN, "t/data/modules/02packages.details.txt" );
#my $details = join '', <IN>;
#close(IN);
# Try the interface which takes in the contents
#$p = Acme::CPANAuthors::Utils::Packages->new($details);
#isa_ok( $p, "Acme::CPANAuthors::Utils::Packages" );
#
#@packages = sort map { $_->package } $p->packages;
#is_deeply(
# \@packages,
# [ qw(Acme::Colour Acme::Colour::Old Acme::ComeFrom Acme::Comment Acme::CramCode Acme::Currency accessors accessors::chained accessors::classic )
# ]
#);
# Try the interface which takes in a .gz
$p = Acme::CPANAuthors::Utils::Packages->new("t/data/modules/02packages.details.txt.gz");
isa_ok( $p, "Acme::CPANAuthors::Utils::Packages" );
@packages = sort map { $_->package } $p->packages;
is_deeply(
\@packages,
[ qw(Acme::Colour Acme::Colour::Old Acme::ComeFrom Acme::Comment Acme::CramCode Acme::Currency accessors accessors::chained accessors::classic )
]
);
# Try the interface which takes in gzipped contents - not supported
#
#open( IN, "t/data/modules/02packages.details.txt.gz" );
#$details = join '', <IN>;
#close(IN);
#
#$p = Acme::CPANAuthors::Utils::Packages->new($details);
#isa_ok( $p, "Acme::CPANAuthors::Utils::Packages" );
#
#@packages = sort map { $_->package } $p->packages;
#is_deeply(
# \@packages,
# [ qw(Acme::Colour Acme::Colour::Old Acme::ComeFrom Acme::Comment Acme::CramCode Acme::Currency accessors accessors::chained accessors::classic )
# ]
#);
( run in 1.179 second using v1.01-cache-2.11-cpan-49f99fa48dc )