]> git.vpit.fr Git - perl/modules/Acme-CPANAuthors-You-re_using.git/blob - lib/Acme/CPANAuthors/You/re_using.pm
A better explaination for why this module is so slow to load
[perl/modules/Acme-CPANAuthors-You-re_using.git] / lib / Acme / CPANAuthors / You / re_using.pm
1 package Acme::CPANAuthors::You::re_using;
2
3 use strict;
4 use warnings;
5
6 use Carp qw/croak/;
7
8 use ExtUtils::Installed;
9
10 use Acme::CPANAuthors::Utils;
11
12 =head1 NAME
13
14 Acme::CPANAuthors::You::re_using - We are the CPAN authors that have written the modules installed on your perl!
15
16 =head1 VERSION
17
18 Version 0.01
19
20 =cut
21
22 our $VERSION;
23 BEGIN {
24  $VERSION = '0.01';
25 }
26
27 =head1 SYNOPSIS
28
29     use Acme::CPANAuthors;
30
31     my $authors = Acme::CPANAuthors->new("You're_using");
32     print $authors->name($_) . " ($_)\n" for $authors->id;
33
34 =head1 DESCRIPTION
35
36 This module builds an L<Acme::CPANAuthors> class by listing all the modules that are installed on the current C<perl> and then retrieving the name and the PAUSE id of their corresponding authors.
37
38 It may take some time to load since it has to search all the directory trees given by your C<@INC> for modules, but also to get and parse CPAN indexes.
39
40 =cut
41
42 our $SKIP;
43
44 BEGIN {
45  return if $SKIP;
46
47  my %authors;
48
49  my $pkgs = Acme::CPANAuthors::Utils::cpan_packages();
50  croak 'Couldn\'t retrieve a valid Parse::CPAN::Packages object' unless $pkgs;
51
52  my $auths = Acme::CPANAuthors::Utils::cpan_authors();
53  croak 'Couldn\'t retrieve a valid Parse::CPAN::Authors object' unless $auths;
54
55  my $installed = ExtUtils::Installed->new(extra_libs => \@INC);
56  croak 'Couldn\'t create a valid ExtUtils::Installed object' unless $installed;
57
58  for ($installed->modules) {
59   next unless defined and $_ ne 'Perl';
60
61   my $mod = $pkgs->package($_);
62   next unless $mod;
63
64   my $dist = $mod->distribution;
65   next unless $dist;
66
67   my $cpanid = $dist->cpanid;
68   next if not $cpanid or exists $authors{$cpanid};
69
70   my $auth = $auths->author($cpanid);
71
72   my $name;
73   $name = $auth->name if defined $auth;
74  
75   $authors{$cpanid} = defined $name ? $name : $cpanid;
76  }
77
78  require Acme::CPANAuthors::Register;
79  Acme::CPANAuthors::Register->import(%authors);
80 }
81
82 =head1 DEPENDENCIES
83
84 L<Carp>, L<ExtUtils::Installed>, L<Acme::CPANAuthors>.
85
86 =head1 SEE ALSO
87
88 All others C<Acme::CPANAuthors::*> modules.
89
90 =head1 AUTHOR
91
92 Vincent Pit, C<< <perl at profvince.com> >>, L<http://www.profvince.com>.
93
94 You can contact me by mail or on C<irc.perl.org> (vincent).
95
96 =head1 BUGS
97
98 Please report any bugs or feature requests to C<bug-acme-cpanauthors-you-re_using at rt.cpan.org>, or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Acme-CPANAuthors-You-re_using>.  I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
99
100 =head1 SUPPORT
101
102 You can find documentation for this module with the perldoc command.
103
104     perldoc Acme::CPANAuthors::You::re_using
105
106 =head1 COPYRIGHT & LICENSE
107
108 Copyright 2009 Vincent Pit, all rights reserved.
109
110 This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
111
112 =cut
113
114 1;