Acme-CPANAuthors
view release on metacpan or search on metacpan
lib/Acme/CPANAuthors.pm view on Meta::CPAN
my ($self, $id, %options) = @_;
return unless $id;
eval {require Gravatar::URL; 1}
or warn($@), return;
my $author = cpan_authors->author($id) or return;
my $default = delete $options{default};
return Gravatar::URL::gravatar_url(
email => $author->email,
%options,
default => Gravatar::URL::gravatar_url(
# Fall back to the CPAN address, as used by metacpan, which will in
# turn fall back to a generated image.
email => $id . '@cpan.org',
%options,
$default ? ( default => $default ) : (),
),
);
}
sub kwalitee {
my ($self, $id) = @_;
return unless $id;
require Acme::CPANAuthors::Utils::Kwalitee;
return Acme::CPANAuthors::Utils::Kwalitee->fetch($id);
}
sub look_for {
my ($self, $id_or_name) = @_;
return unless defined $id_or_name;
unless (ref $id_or_name eq 'Regexp') {
$id_or_name = qr/$id_or_name/i;
}
my @found;
my @categories = ref $self ? @{ $self->{categories} } : ();
@categories = _list_categories() unless @categories;
foreach my $category ( @categories ) {
my %authors = _get_authors_of($category);
while ( my ($id, $name) = each %authors ) {
if ($id =~ /$id_or_name/ or $name =~ /$id_or_name/) {
push @found, {
id => $id,
name => $name,
category => $category,
};
}
}
}
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)$/;
my $package = "Acme::CPANAuthors\::$category";
unless ($package->can('authors')) {
eval "require $package";
if ( $@ ) {
carp "$category CPAN Authors are not registered yet: $@";
return;
}
# some may actually lack 'authors' interface
return unless $package->can('authors');
}
$package->authors;
}
1;
__END__
=head1 NAME
Acme::CPANAuthors - We are CPAN authors
=head1 SYNOPSIS
use Acme::CPANAuthors;
my $authors = Acme::CPANAuthors->new('Japanese');
my $number = $authors->count;
my @ids = $authors->id;
my @distros = $authors->distributions('ISHIGAKI');
my $url = $authors->avatar_url('ISHIGAKI');
my $kwalitee = $authors->kwalitee('ISHIGAKI');
my @info = $authors->look_for('ishigaki');
If you don't like this interface, just use a specific authors list.
use Acme::CPANAuthors::Japanese;
my %authors = Acme::CPANAuthors::Japanese->authors;
# note that ->author is context sensitive. however, you can't
# write this without dereference for older perls as "keys"
# checks the type (actually, the number) of args.
for my $name (keys %{ Acme::CPANAuthors::Japanese->authors }) {
print Acme::CPANAuthors::Japanese->authors->{$name}, "\n";
}
=head1 DESCRIPTION
Sometimes we just want to know something to confirm we're not
( run in 1.046 second using v1.01-cache-2.11-cpan-140bd7fdf52 )