CPAN-Index-API
view release on metacpan or search on metacpan
lib/CPAN/Index/API/File/Whois.pm view on Meta::CPAN
package CPAN::Index::API::File::Whois;
our $VERSION = '0.008';
use strict;
use warnings;
use XML::Twig;
use namespace::autoclean;
use Moose;
use MooseX::ClassAttribute;
with qw(
CPAN::Index::API::Role::Writable
CPAN::Index::API::Role::Readable
CPAN::Index::API::Role::Clonable
CPAN::Index::API::Role::HavingGeneratedBy
);
class_has _field_map => (
is => 'bare',
isa => 'HashRef',
traits => ['Hash'],
handles => {
_original_fields => 'keys',
_name_for_orig_field => 'get',
},
default => sub { {
asciiname => 'ascii_name',
fullname => 'full_name',
email => 'email',
has_cpandir => 'has_cpandir',
homepage => 'homepage',
id => 'cpanid',
info => 'info',
type => 'type',
} },
);
has authors => (
is => 'bare',
isa => 'ArrayRef[HashRef]',
default => sub { [] },
traits => ['Array'],
handles => {
authors => 'elements',
add_author => 'push',
author_count => 'count',
},
);
sub author
{
my ($self, $name) = @_;
return first { $_->{cpanid} eq $name } $self->authors;
}
sub parse {
my ( $self, $content ) = @_;
my $twig = XML::Twig->new;
my $xml = $twig->parse($content);
my $root = $xml->root;
my @authors;
foreach my $author ( $xml->root->children('cpanid') ) {
my %data;
( run in 0.536 second using v1.01-cache-2.11-cpan-39bf76dae61 )