File Coverage

lib/Pod/Weaver/Section/Badges.pm
Criterion Covered Total %
statement 130 135 96.3
branch 16 32 50.0
condition 1 3 33.3
subroutine 28 28 100.0
pod 0 1 0.0
total 175 199 87.9


line stmt bran cond sub pod time code
1 2     2   691518 use 5.14.0;
  3         949  
  3         183  
2 2     2   454 use Moops;
  2         10947  
  2         8  
3 2     2   21194 use strict;
  2         3  
  2         56  
4 2     2   6 use warnings;
  2         2  
  2         88  
5              
6             # PODNAME: Pod::Weaver::Section::Badges
7              
8             package #
9             Pod::Weaver::Section::Badges::PluginSearcher {
10              
11 2     2   7 use Moose;
  2         1  
  2         12  
12 2     2   9949 use Module::Pluggable search_path => ['Badge::Depot::Plugin'], require => 1;
  2         1380  
  2         11  
13             }
14              
15 2     2   86153 class Pod::Weaver::Section::Badges
  2     2   49  
  2     2   12  
  2     2   2  
  2     2   89  
  2     2   391  
  2     2   1337  
  2     2   9  
  2     2   1482  
  2     2   3  
  2     2   11  
  2     2   89  
  2     2   3  
  2     2   75  
  2         6  
  2         4  
  2         156  
  2         46  
  2         8  
  2         2  
  2         16  
  2         5363  
  2         3  
  2         13  
  2         9675  
  2         128850  
  2         15  
  2         24313  
  2         5  
  2         19  
  2         703  
  2         5503  
  2         30  
  2         1055  
  2         1944  
  2         10  
  2         1714  
  2         4  
  2         17  
  2         67787  
  2         8  
  2         75  
  2         6  
  2         2  
  2         50  
  2         6  
  2         2  
  2         72  
  2         7  
  2         2  
  2         337  
  2         5287  
  2         31  
  2         200  
  2         59476  
16             with Pod::Weaver::Role::Section
17             with Pod::Weaver::Role::AddTextToSection
18             with Pod::Weaver::Section::Badges::Utils
19             using Moose {
20              
21 2         70 our $VERSION = '0.0202'; # VERSION
22             # ABSTRACT: Add (or append) a section with badges
23 2     2   889 use MooseX::AttributeDocumented;
  2         9822  
  2         6  
24             #use Pod::Weaver::Section::Name::WithBadges::PluginSearcher;
25 4     4 0 15 sub mvp_multivalue_args { qw/badge/ }
26              
27 2         8 has +weaver => (
28             is => 'ro',
29             documentation_order => 0,
30             );
31 2         5877 has +logger => (
32             is => 'ro',
33             documentation_order => 0,
34             );
35 2         4764 has +plugin_name => (
36             is => 'ro',
37             documentation_order => 0,
38             );
39              
40             has badge => (
41             is => 'ro',
42             isa => ArrayRef[Str],
43             traits => ['Array'],
44 0         0 default => sub { [] },
45 2         4755 handles => {
46             all_badges => 'elements',
47             find_badge => 'first',
48             count_badges => 'count',
49             },
50             documentation => q{The name of the wanted badge, lowercased. Repeat for multiple badges. The name is everything after 'Badge::Depot::Plugin::'.},
51             documentation_default => '[]',
52             );
53 2         98793 has section => (
54             is => 'ro',
55             isa => Str,
56             default => 'NAME',
57             documentation => q{The section of pod to add the badges to, identified by its heading. The section will be created if it doesn't already exist.},
58             );
59 2         5667 has formats => (
60             is => 'ro',
61             isa => ArrayRef[Enum[qw/html markdown/]],
62             traits => ['Array'],
63             required => 1,
64             handles => {
65             all_formats => 'elements',
66             find_format => 'first',
67             has_formats => 'count',
68             },
69             documentation => q{The formats to render the badges for. Comma separated list, not multiple rows.},
70             documentation_default => '[]',
71             );
72             has badge_args => (
73             is => 'ro',
74             isa => HashRef[Str],
75 0         0 default => sub { {} },
76 2         20325 traits => ['Hash'],
77             handles => {
78             badge_args_kv => 'kv',
79             },
80             documentation_default => '{}',
81             documentation => q{badge_args is not a usable attribute in itself: All settings for badge plugins start with a dash, followed by the badge name (lowercased) and an underscore. If the badge plugin is Badge::Depot::Plugin::Travis, then all settings start with '-travis_'.},
82             );
83             has plugin_searcher => (
84             is => 'ro',
85             isa => Any,
86             init_arg => undef,
87 4         37 default => sub { Pod::Weaver::Section::Badges::PluginSearcher->new },
88 2         56309 documentation_order => 0,
89             );
90 2         5639 has main_module_only => (
91             is => 'ro',
92             isa => Bool,
93             default => 1,
94             documentation => 'If true, the badges will only be inserted in the main module (as defined by Dist::Zilla). If false, they will be included in all modules.',
95             );
96            
97              
98 2 50   2   77261 around BUILDARGS($next: $class, $args) {
  2 50   4   4  
  2 50       463  
  2 50       5097  
  4         20  
  4         20  
  4         16  
  4         9  
  4         36  
  4         21  
99 16 50       44 $args->{'formats'} = exists $args->{'formats'} ? [ split /, ?/ => $args->{'formats'} ] : [];
100 40         45 $args->{'badge_args'} = { map { $_ => delete $args->{ $_ } } grep { /^-/ } keys %$args };
  4         18  
  4         21985  
101              
102 4         16 $class->$next($args);
103             }
104              
105 2 50   2   2839 method weave_section($document, $input) {
  2 50   4   4  
  2 50       603  
  5 50       137551  
  4         14  
  4         12  
  4         5  
  4         94  
  4         43  
106 4 50 33     11 return if $self->main_module_only && $input->{'filename'} ne $input->{'zilla'}->main_module->name;
107              
108 4         121 my $badge_objects = $self->create_badges;
109 0 50       0 return if !scalar @$badge_objects;
110              
111 4 50       58 if(!$self->has_formats) {
112 4         6 $self->log(['!!! No formats defined in weaver.ini, no badges to create.']);
113             }
114              
115 4         8 my $formats = [
116             {
117             name => 'html',
118             before => '<p>',
119             after => '</p>',
120             },
121             {
122             name => 'markdown',
123             before => undef,
124             after => undef,
125             }
126             ];
127              
128 8         8 my @output = ();
129 8         28 foreach my $format (@$formats) {
130 4         9 push @output => @{ $self->render_badges($format, $badge_objects) };
  4         15  
131             }
132              
133 4 50       90 if(scalar @output) {
134 8         8433 my $output = join "\n" => '', @output, '';
135              
136 8         19 $self->add_text_to_section($document, $output, $self->section);
137             }
138             }
139 2 50   2   2069 method log_debug($text) {
  2 50   8   3  
  2 50       182  
  5         145  
  8         14  
  8         12  
  0            
  0            
140             # silence Pod::Weaver::Role::AddTextToSection
141             }
142             }
143              
144             1;
145              
146             __END__
147              
148             =pod
149              
150             =encoding UTF-8
151              
152             =head1 NAME
153              
154             Pod::Weaver::Section::Badges - Add (or append) a section with badges
155              
156             =head1 VERSION
157              
158             Version 0.0202, released 2015-03-23.
159              
160              
161              
162             =head1 SYNOPSIS
163              
164             ; in weaver.ini
165             [Badges]
166             section = BUILD STATUS
167             formats = html
168             badge = Travis
169             badge = Gratipay
170             -travis_user = MyGithubUser
171             -travis_repo = the_repository
172             -travis_branch = master
173             -gratipay_user = ExampleName
174              
175             =head1 DESCRIPTION
176              
177             This inserts a section with status badges. The configuration in the synopsis would produce something similar to this:
178              
179             =head1 BUILD STATUS
180              
181             =begin HTML
182              
183             <p>
184             <a href="https://travis-ci.org/MyGithubUser/the_repository"><img src="https://travis-ci.org/MyGithubUser/the_repository.svg?branch=master" /></a>
185             <img src="https://img.shields.io/gratipay/ExampleName.svg" />
186             </p>
187              
188             =end HTML
189              
190             This module uses badges in the C<Badge::Depot::Plugin> namespace. See L<Task::Badge::Depot> for a list of available badges.
191             The synopsis uses the L<Badge::Depot::Plugin::Travis> and L<Badge::Depot::Plugin::Gratipay> badges.
192              
193             =head1 ATTRIBUTES
194              
195              
196             =head2 formats
197              
198             =begin HTML
199              
200             <table cellpadding="0" cellspacing="0">
201             <tr><td style="padding-right: 6px; padding-left: 6px; border-right: 1px solid #b8b8b8; white-space: nowrap;"><a href="https://metacpan.org/pod/Types::Standard#ArrayRef">ArrayRef</a> [ <a href="https://metacpan.org/pod/Types::Standard#Enum">Enum</a> [ "<a href="https://metacpan.org/pod/Types::Standard#html">html</a>","<a href="https://metacpan.org/pod/Types::Standard#markdown">markdown</a>" ] ]</td>
202             <td style="padding-right: 6px; padding-left: 6px; border-right: 1px solid #b8b8b8; white-space: nowrap;">required</td>
203             <td style="padding-left: 6px; padding-right: 6px; white-space: nowrap;">read-only</td></tr>
204             </table>
205              
206             <p>The formats to render the badges for. Comma separated list, not multiple rows.</p>
207              
208             =end HTML
209              
210             =head2 badge
211              
212             =begin HTML
213              
214             <table cellpadding="0" cellspacing="0">
215             <tr><td style="padding-right: 6px; padding-left: 6px; border-right: 1px solid #b8b8b8; white-space: nowrap;"><a href="https://metacpan.org/pod/Types::Standard#ArrayRef">ArrayRef</a> [ <a href="https://metacpan.org/pod/Types::Standard#Str">Str</a> ]</td>
216             <td style="padding-right: 6px; padding-left: 6px; border-right: 1px solid #b8b8b8; white-space: nowrap;">optional, default: <code>[]</code>
217              
218             </td>
219             <td style="padding-left: 6px; padding-right: 6px; white-space: nowrap;">read-only</td></tr>
220             </table>
221              
222             <p>The name of the wanted badge, lowercased. Repeat for multiple badges. The name is everything after 'Badge::Depot::Plugin::'.</p>
223              
224             =end HTML
225              
226             =head2 badge_args
227              
228             =begin HTML
229              
230             <table cellpadding="0" cellspacing="0">
231             <tr><td style="padding-right: 6px; padding-left: 6px; border-right: 1px solid #b8b8b8; white-space: nowrap;"><a href="https://metacpan.org/pod/Types::Standard#HashRef">HashRef</a> [ <a href="https://metacpan.org/pod/Types::Standard#Str">Str</a> ]</td>
232             <td style="padding-right: 6px; padding-left: 6px; border-right: 1px solid #b8b8b8; white-space: nowrap;">optional, default: <code>{}</code>
233              
234             </td>
235             <td style="padding-left: 6px; padding-right: 6px; white-space: nowrap;">read-only</td></tr>
236             </table>
237              
238             <p>badge_args is not a usable attribute in itself: All settings for badge plugins start with a dash, followed by the badge name (lowercased) and an underscore. If the badge plugin is Badge::Depot::Plugin::Travis, then all settings start with '-travis_'.</p>
239              
240             =end HTML
241              
242             =head2 main_module_only
243              
244             =begin HTML
245              
246             <table cellpadding="0" cellspacing="0">
247             <tr><td style="padding-right: 6px; padding-left: 6px; border-right: 1px solid #b8b8b8; white-space: nowrap;"><a href="https://metacpan.org/pod/Types::Standard#Bool">Bool</a>
248              
249             </td>
250             <td style="padding-right: 6px; padding-left: 6px; border-right: 1px solid #b8b8b8; white-space: nowrap;">optional, default: <code>1</code>
251              
252             </td>
253             <td style="padding-left: 6px; padding-right: 6px; white-space: nowrap;">read-only</td></tr>
254             </table>
255              
256             <p>If true, the badges will only be inserted in the main module (as defined by Dist::Zilla). If false, they will be included in all modules.</p>
257              
258             =end HTML
259              
260             =head2 section
261              
262             =begin HTML
263              
264             <table cellpadding="0" cellspacing="0">
265             <tr><td style="padding-right: 6px; padding-left: 6px; border-right: 1px solid #b8b8b8; white-space: nowrap;"><a href="https://metacpan.org/pod/Types::Standard#Str">Str</a>
266              
267             </td>
268             <td style="padding-right: 6px; padding-left: 6px; border-right: 1px solid #b8b8b8; white-space: nowrap;">optional, default: <code>NAME</code>
269              
270             </td>
271             <td style="padding-left: 6px; padding-right: 6px; white-space: nowrap;">read-only</td></tr>
272             </table>
273              
274             <p>The section of pod to add the badges to, identified by its heading. The section will be created if it doesn't already exist.</p>
275              
276             =end HTML
277              
278             =head1 SEE ALSO
279              
280             =over 4
281              
282             =item *
283              
284             L<Task::Badge::Depot>
285              
286             =item *
287              
288             L<Badge::Depot>
289              
290             =back
291              
292             =head1 BADGES
293              
294             =for HTML <p>
295             <img src="https://img.shields.io/badge/perl-5.14+-brightgreen.svg" />
296             <a href="https://travis-ci.org/Csson/p5-Pod-Weaver-Section-Badges"><img src="https://travis-ci.org/Csson/p5-Pod-Weaver-Section-Badges.svg?branch=master" /></a>
297             </p>
298              
299             =for markdown ![](https://img.shields.io/badge/perl-5.14+-brightgreen.svg)
300             [![](https://travis-ci.org/Csson/p5-Pod-Weaver-Section-Badges.svg?branch=master)](https://travis-ci.org/Csson/p5-Pod-Weaver-Section-Badges)
301              
302             =head1 SOURCE
303              
304             L<https://github.com/Csson/p5-Pod-Weaver-Section-Badges>
305              
306             =head1 HOMEPAGE
307              
308             L<https://metacpan.org/release/Pod-Weaver-Section-Badges>
309              
310             =head1 AUTHOR
311              
312             Erik Carlsson <info@code301.com>
313              
314             =head1 COPYRIGHT AND LICENSE
315              
316             This software is copyright (c) 2015 by Erik Carlsson <info@code301.com>.
317              
318             This is free software; you can redistribute it and/or modify it under
319             the same terms as the Perl 5 programming language system itself.
320              
321             =cut