File Coverage

blib/lib/Acme/CPANAuthors/Acme/CPANAuthors/Authors.pm
Criterion Covered Total %
statement 12 39 30.7
branch 0 10 0.0
condition 0 2 0.0
subroutine 4 6 66.6
pod n/a
total 16 57 28.0


line stmt bran cond sub pod time code
1             package Acme::CPANAuthors::Acme::CPANAuthors::Authors;
2 1     1   28443 use strict;
  1         3  
  1         42  
3 1     1   5 use warnings;
  1         2  
  1         31  
4              
5             =head1 NAME
6              
7             Acme::CPANAuthors::Acme::CPANAuthors::Authors - We are CPAN authors who have authored Acme::CPANAuthors modules
8              
9             =cut
10              
11 1     1   2894 use version; our $VERSION = version->declare('v1.0.0');
  1         2861  
  1         7  
12             use Acme::CPANAuthors::Register (
13 1         9 ABIGAIL => q[Abigail], # A::C::Dutch ...or not.
14             ACALPINI => q[Aldo Calpini], # A::C::Italian
15             ASHLEY => q[Ashley Pond V], # A::C::Misanthrope
16             AZAWAWI =>
17             q[أحمد محمد زواوي - Ahmad M. Zawawi], # A::C::Arabic
18             BARBIE => q[Barbie], # A::C::British
19             BINGOS => q[Chris Williams], # A::C::POE
20             BRACETA => q[Luís Azevedo], # A::C::Portuguese
21             BURAK => q[Burak Gürsoy], # A::C::Turkish
22             ETHER => q[Karen Etheridge], # A::C::Nonhuman
23             FAYLAND => q[Fayland 林], # A::C::Chinese
24             FLORA => q[Florian Ragwitz], # A::C::German
25             GARU => q[Breno G. de Oliveira], # A::C::Brazilian
26             GRAY => q[gray], # A::C::GitHub
27             GUGOD => q[劉康民], # A::C::Taiwanese
28             HINRIK => q[Hinrik Örn Sigurðsson], # A::C::Icelandic
29             ISHIGAKI => q[Kenichi Ishigaki], # The Original
30             JEEN => q[Jeen Lee], # A::C::Korean
31             JLMARTIN => q[Jose Luis Martinez Torres], # A::C::Catalonian
32             KAARE => q[Kaare Rasmussen], # A::C::Danish
33             KENTARO => q[Kentaro Kuribayashi], # A::C::GeekHouse
34             MARCEL => q[Marcel Grünauer == hanekomu], # A::C::Austrian
35             MONS => q[Mons Anderson], # A::C::AnyEvent
36             RBO => q[Robert Bohne], # A::C::German
37             SALVA => q[Salvador Fandiño García], # A::C::Spanish
38             SANKO => q[Sanko Robinson], # Hey, that's me!
39             SAPER => q[Sébastien Aperghis-Tramoni], # A::C::French
40             SFINK => q[Steve A Fink], # A::C::Not
41             SHANTANU => q[Shantanu Bhadoria], # A::C::India
42             SHARIFULN => q[Анатолий Шарифулин], # A::C::Russian
43             SHARYANTO => q[Steven Haryanto], # A::C::Indonesian
44             SHLOMIF => q[Shlomi Fish], # A::C::Israeli
45             SKIM => q[Michal Špaček], # A::C::Czech
46             SROMANOV => q[Сергей Романов], # A::C::Belarusian
47             VPIT => q[Vincent Pit], # A::C::You're_using
48             WOLDRICH => q[Magnus Woldrich], # A::C::Swedish
49             ZOFFIX => q[Zoffix Znet] # A::C::Canadian
50 1     1   1497 );
  1         655  
51              
52             sub _regen {
53 0     0     require HTTP::Tiny;
54 0           my $data = '';
55 0           my $authsec = 0;
56 0           my %authors;
57             die "Failed\n"
58             unless HTTP::Tiny->new->request(
59             'GET',
60             'http://www.cpan.org/modules/02packages.details.txt',
61             {data_callback => sub { # Don't scrape the whole file
62 0     0     my $chunk = shift;
63 0 0         if ($chunk =~ m[^Acme::CPANAuthors]sm) {
    0          
64 0           $authsec++;
65 0           $data .= $chunk;
66             }
67             elsif ($authsec) { # No more Authors in 02packages
68 0           while ($data
69             =~ m[^(?:Acme::CPANAuthors(?:::(\S+))?).+\w/\w\w/(\w+)/.+$]mg
70             )
71 0   0       { $authors{$2} //= [];
72 0           push @{$authors{$2}}, $1;
  0            
73             }
74 0           my %old = authors(); # Current authors
75 0 0         my @new = grep { defined $old{$_} ? () : $_ } keys %authors;
  0            
76 0           print scalar(@new)
77             . " new Acme::CPANAuthors authors to add\n";
78 0 0         return if !@new;
79 0           require MetaCPAN::API;
80 0           my $mcpan = MetaCPAN::API->new();
81 0           binmode(STDOUT, ':utf8');
82              
83 0           for my $id (sort @new) {
84 0           my $author = $mcpan->author($id);
85 0           printf " %s => q[%s], # %s\n", $id, $author->{name},
86 0           join ', ', map { 'A::C::' . $_ } @{$authors{$id}};
  0            
87             }
88             exit # We're done
89 0           }
90             }
91             }
92 0 0         )->{success};
93             }
94             1;
95              
96             =head1 Synopsis
97              
98             use Acme::CPANAuthors;
99              
100             my $authors = Acme::CPANAuthors->new('Acme::CPANAuthors::Acme::CPANAuthors::Authors');
101              
102             $number = $authors->count;
103             @ids = $authors->id;
104             @distros = $authors->distributions('ACALPINI');
105             $url = $authors->avatar_url('SHLOMIF');
106             $kwalitee = $authors->kwalitee('SANKO');
107              
108             =head1 Description
109              
110             This class provides a hash of Pause IDs/names of Acme::CPANAuthors::*
111             authorin' CPAN authors.
112              
113             I started this module because
114             L doesn't
115             exist and apparently I'm not listed in
116             L. ((sigh)) I just
117             want to be a part of something... great... greater... than-- um, sorry, lost
118             my train of thought.
119              
120             Anyway, I decided both L
121             (well covered between http://search.cpan.org/author/ and
122             http://pause.perl.org/pause/query?ACTION=who_is) and
123             L (only include authors
124             who have published at least one distribution, script, etc.) would just be too
125             time consuming for a 3AM lapse in judgement so... there you are.
126              
127             =head1 Installation
128              
129             To install this module, run the following commands:
130              
131             perl Build.PL
132             ./Build
133             ./Build test
134             ./Build install
135              
136             =head1 Maintenance
137              
138             Have you authored a module in the C namespace, aren't
139             listed here, and would like to be? Or are you currently listed but have since
140             turned away from your deviant, C ways and would like to be removed? Just
141             contact me L or stop by the Issue Tracker and I'll fix ya
142             right up.
143              
144             =head1 Bugs
145              
146             Report any bugs or feature requests to the Issue tracker or
147             directly to L. I'll keep you up to date on any related
148             changes.
149              
150             Seriously, it's just a list of names... what could possibly go wrong?
151              
152             E_E
153              
154             E_E
155              
156             Yeah.
157              
158             =head1 Support
159              
160             You can find documentation for this module with the perldoc command.
161              
162             perldoc Acme::CPANAuthors::Acme::CPANAuthors::Authors
163              
164             You can also look for information at:
165              
166             =over 4
167              
168             =item * Issue Tracker: Acme::CPANAuthors::Acme::CPANAuthors::Authors' bug tracker
169              
170             http://github.com/sanko/acme-cpanauthors-acme-cpanauthors-authors/issues/
171              
172             =item * AnnoCPAN: Annotated CPAN documentation
173              
174             http://annocpan.org/dist/Acme-CPANAuthors-Acme-CPANAuthors-Authors
175              
176             =item * CPAN Ratings
177              
178             http://cpanratings.perl.org/d/Acme-CPANAuthors-Acme-CPANAuthors-Authors
179              
180             =item * Search CPAN
181              
182             http://search.cpan.org/dist/Acme-CPANAuthors-Acme-CPANAuthors-Authors
183              
184             =item * Version Control Repository:
185              
186             http://github.com/sanko/acme-cpanauthors-acme-cpanauthors-authors/
187              
188             =back
189              
190             =head1 See Also
191              
192             L,
193             L,
194             L,
195             L, et al.
196              
197             See the examples found in F for usage.
198              
199             =head1 Acknowledgements
200              
201             Kenichi Ishigaki for L
202              
203             =head1 Author
204              
205             Sanko Robinson - http://sankorobinson.com/
206              
207             CPAN ID: SANKO
208              
209             =head1 License and Legal
210              
211             Copyright (C) 2009-2013 by Sanko Robinson Esanko@cpan.orgE
212              
213             This program is free software; you can redistribute it and/or modify
214             it under the terms of The Artistic License 2.0. See the F
215             file included with this distribution or
216             http://www.perlfoundation.org/artistic_license_2_0. For
217             clarification, see http://ww.perlfoundation.org/artistic_2_0_notes.
218              
219             When separated from the distribution, all POD documentation is covered
220             by the Creative Commons Attribution-Share Alike 3.0 License. See
221             http://creativecommons.org/licenses/by-sa/3.0/us/legalcode. For
222             clarification, see http://creativecommons.org/licenses/by-sa/3.0/us/.
223              
224             =cut