File Coverage

blib/lib/Perl/Critic/PolicyParameter/Behavior/StringList.pm
Criterion Covered Total %
statement 41 41 100.0
branch 8 8 100.0
condition 5 6 83.3
subroutine 8 8 100.0
pod 2 2 100.0
total 64 65 98.4


line stmt bran cond sub pod time code
1             package Perl::Critic::PolicyParameter::Behavior::StringList;
2              
3 40     40   580 use 5.010001;
  40         127  
4 40     40   157 use strict;
  40         61  
  40         658  
5 40     40   130 use warnings;
  40         97  
  40         1742  
6              
7 40     40   157 use Perl::Critic::Utils qw( :characters words_from_string hashify );
  40         54  
  40         2140  
8              
9 40     40   8026 use parent qw{ Perl::Critic::PolicyParameter::Behavior };
  40         75  
  40         199  
10              
11             our $VERSION = '1.156';
12              
13             #-----------------------------------------------------------------------------
14              
15             sub initialize_parameter {
16 3576     3576 1 7154 my (undef, $parameter, $specification) = @_;
17              
18             # Unfortunately, this has to be kept as a reference, rather than a regular
19             # array, due to a problem in Devel::Cycle
20             # (http://rt.cpan.org/Ticket/Display.html?id=25360) which causes
21             # t/92_memory_leaks.t to fall over.
22 3576         6662 my $always_present_values = $specification->{list_always_present_values};
23             $parameter->_get_behavior_values()->{always_present_values} =
24 3576         8913 $always_present_values;
25              
26 3576 100       8574 if ( not $always_present_values ) {
27 2484         4139 $always_present_values = [];
28             }
29              
30             $parameter->_set_parser(
31             sub {
32             # Normally bad thing, obscuring a variable in an outer scope
33             # with a variable with the same name is being done here in
34             # order to remain consistent with the parser function interface.
35 3544     3544   7174 my ($policy, $parameter, $config_string) = @_; ## no critic(Variables::ProhibitReusedNames)
36              
37 3544         4769 my @values = @{$always_present_values};
  3544         7888  
38 3544   100     12604 my $value_string = $config_string // $parameter->get_default_string();
39              
40 3544 100       7777 if ( defined $value_string ) {
41 3096         8568 push @values, words_from_string($value_string);
42             }
43              
44 3544         9885 my %values = hashify(@values);
45              
46 3544         14219 $policy->__set_parameter_value($parameter, \%values);
47              
48 3544         8096 return;
49             }
50 3576         19737 );
51              
52 3576         6059 return;
53             }
54              
55             #-----------------------------------------------------------------------------
56              
57             sub generate_parameter_description {
58 341     341 1 681 my (undef, $parameter) = @_;
59              
60             my $always_present_values =
61 341         737 $parameter->_get_behavior_values()->{always_present_values};
62              
63 341         732 my $description = $parameter->_get_description_with_trailing_period();
64 341 100 66     1240 if ( $description and $always_present_values ) {
65 108         222 $description .= qq{\n};
66             }
67              
68 341 100       564 if ( $always_present_values ) {
69 108         200 $description .= 'Values that are always included: ';
70 108         144 $description .= join ', ', sort @{ $always_present_values };
  108         656  
71 108         193 $description .= $PERIOD;
72             }
73              
74 341         716 return $description;
75             }
76              
77             1;
78              
79             __END__
80              
81             #-----------------------------------------------------------------------------
82              
83             =pod
84              
85             =for stopwords
86              
87             =head1 NAME
88              
89             Perl::Critic::PolicyParameter::Behavior::StringList - Actions appropriate for a parameter that is a list of strings.
90              
91              
92             =head1 DESCRIPTION
93              
94             Provides a standard set of functionality for a string list
95             L<Perl::Critic::PolicyParameter|Perl::Critic::PolicyParameter> so that
96             the developer of a policy does not have to provide it her/himself.
97              
98             NOTE: Do not instantiate this class. Use the singleton instance held
99             onto by
100             L<Perl::Critic::PolicyParameter|Perl::Critic::PolicyParameter>.
101              
102              
103             =head1 INTERFACE SUPPORT
104              
105             This is considered to be a non-public class. Its interface is subject
106             to change without notice.
107              
108              
109             =head1 METHODS
110              
111             =over
112              
113             =item C<initialize_parameter( $parameter, $specification )>
114              
115             Plug in the functionality this behavior provides into the parameter,
116             based upon the configuration provided by the specification.
117              
118             This behavior looks for one configuration item:
119              
120             =over
121              
122             =item always_present_values
123              
124             Optional. Values that should always be included, regardless of what
125             the configuration of the parameter specifies, as an array reference.
126              
127             =back
128              
129             =item C<generate_parameter_description( $parameter )>
130              
131             Create a description of the parameter, based upon the description on
132             the parameter itself, but enhancing it with information from this
133             behavior.
134              
135             In this specific case, the always present values are added at the end.
136              
137             =back
138              
139              
140             =head1 AUTHOR
141              
142             Elliot Shank <perl@galumph.com>
143              
144             =head1 COPYRIGHT
145              
146             Copyright (c) 2006-2023 Elliot Shank.
147              
148             This program is free software; you can redistribute it and/or modify
149             it under the same terms as Perl itself. The full text of this license
150             can be found in the LICENSE file included with this module.
151              
152             =cut
153              
154             # Local Variables:
155             # mode: cperl
156             # cperl-indent-level: 4
157             # fill-column: 78
158             # indent-tabs-mode: nil
159             # c-indentation-style: bsd
160             # End:
161             # ex: set ts=8 sts=4 sw=4 tw=78 ft=perl expandtab shiftround :