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 )