File Coverage

blib/lib/Perl/ToPerl6/OptionsProcessor.pm
Criterion Covered Total %
statement 104 104 100.0
branch 3 4 75.0
condition 2 3 66.6
subroutine 32 32 100.0
pod 21 21 100.0
total 162 164 98.7


line stmt bran cond sub pod time code
1             package Perl::ToPerl6::OptionsProcessor;
2              
3 17     17   4945 use 5.006001;
  17         49  
4 17     17   74 use strict;
  17         22  
  17         443  
5 17     17   69 use warnings;
  17         320  
  17         534  
6              
7 17     17   68 use English qw(-no_match_vars);
  17         27  
  17         89  
8              
9 17     17   9207 use Perl::ToPerl6::Exception::AggregateConfiguration;
  17         32  
  17         788  
10 17     17   10213 use Perl::ToPerl6::Exception::Configuration::Option::Global::ExtraParameter;
  17         708  
  17         1093  
11 17         1198 use Perl::ToPerl6::Utils qw<
12             :booleans :characters :severities :data_conversion $DEFAULT_VERBOSITY
13 17     17   102 >;
  17         33  
14 17         2527 use Perl::ToPerl6::Utils::Constants qw<
15             $PROFILE_STRICTNESS_DEFAULT
16             :color_severity
17 17     17   9203 >;
  17         34  
18 17     17   3506 use Perl::ToPerl6::Utils::DataConversion qw< dor >;
  17         30  
  17         10300  
19              
20             our $VERSION = '0.03';
21              
22             #-----------------------------------------------------------------------------
23              
24             sub new {
25 136     136 1 8022 my ($class, %args) = @_;
26 136         276 my $self = bless {}, $class;
27 136         436 $self->_init( %args );
28 135         429 return $self;
29             }
30              
31             #-----------------------------------------------------------------------------
32              
33             sub _init {
34 136     136   252 my ( $self, %args ) = @_;
35              
36             # Multi-value defaults
37 136         626 my $exclude = dor(delete $args{exclude}, $EMPTY);
38 136         544 $self->{_exclude} = [ words_from_string( $exclude ) ];
39              
40 136         364 my $include = dor(delete $args{include}, $EMPTY);
41 136         352 $self->{_include} = [ words_from_string( $include ) ];
42              
43 136         351 my $program_extensions = dor(delete $args{'program-extensions'}, $EMPTY);
44 136         323 $self->{_program_extensions} = [ words_from_string( $program_extensions) ];
45              
46             # Single-value defaults
47 136         382 $self->{_force} = dor(delete $args{force}, $FALSE);
48 136         409 $self->{_only} = dor(delete $args{only}, $FALSE);
49             $self->{_profile_strictness} =
50 136         391 dor(delete $args{'profile-strictness'}, $PROFILE_STRICTNESS_DEFAULT);
51 136         356 $self->{_single_transformer} = dor(delete $args{'single-transformer'}, $EMPTY);
52 136         388 $self->{_severity} = dor(delete $args{severity}, $SEVERITY_HIGHEST);
53 136         363 $self->{_theme} = dor(delete $args{theme}, $EMPTY);
54 136         352 $self->{_top} = dor(delete $args{top}, $FALSE);
55 136         401 $self->{_verbose} = dor(delete $args{verbose}, $DEFAULT_VERBOSITY);
56 136         404 $self->{_mogrification_fatal} = dor(delete $args{'mogrification-fatal'}, $FALSE);
57 136         363 $self->{_pager} = dor(delete $args{pager}, $EMPTY);
58 136         330 $self->{_allow_unsafe} = dor(delete $args{'allow-unsafe'}, $FALSE);
59              
60             $self->{_color_severity_highest} = dor(
61             delete $args{'color-severity-highest'},
62             delete $args{'colour-severity-highest'},
63             delete $args{'color-severity-5'},
64 136         451 delete $args{'colour-severity-5'},
65             $PROFILE_COLOR_SEVERITY_HIGHEST_DEFAULT,
66             );
67             $self->{_color_severity_high} = dor(
68             delete $args{'color-severity-high'},
69             delete $args{'colour-severity-high'},
70             delete $args{'color-severity-4'},
71 136         396 delete $args{'colour-severity-4'},
72             $PROFILE_COLOR_SEVERITY_HIGH_DEFAULT,
73             );
74             $self->{_color_severity_medium} = dor(
75             delete $args{'color-severity-medium'},
76             delete $args{'colour-severity-medium'},
77             delete $args{'color-severity-3'},
78 136         443 delete $args{'colour-severity-3'},
79             $PROFILE_COLOR_SEVERITY_MEDIUM_DEFAULT,
80             );
81             $self->{_color_severity_low} = dor(
82             delete $args{'color-severity-low'},
83             delete $args{'colour-severity-low'},
84             delete $args{'color-severity-2'},
85 136         454 delete $args{'colour-severity-2'},
86             $PROFILE_COLOR_SEVERITY_LOW_DEFAULT,
87             );
88             $self->{_color_severity_lowest} = dor(
89             delete $args{'color-severity-lowest'},
90             delete $args{'colour-severity-lowest'},
91             delete $args{'color-severity-1'},
92 136         374 delete $args{'colour-severity-1'},
93             $PROFILE_COLOR_SEVERITY_LOWEST_DEFAULT,
94             );
95              
96             # If we're using a pager or not outputing to a tty don't use colors.
97             # Can't use IO::Interactive here because we /don't/ want to check STDIN.
98 136 50 66     436 my $default_color = ($self->pager() or not -t *STDOUT) ? $FALSE : $TRUE;
99 136         405 $self->{_color} = dor(delete $args{color}, delete $args{colour}, $default_color);
100              
101             # If there's anything left, complain.
102 136         434 _check_for_extra_options(%args);
103              
104 135         215 return $self;
105             }
106              
107             #-----------------------------------------------------------------------------
108              
109             sub _check_for_extra_options {
110 136     136   249 my %args = @_;
111              
112 136 100       525 if ( my @remaining = sort keys %args ){
113 1         9 my $errors = Perl::ToPerl6::Exception::AggregateConfiguration->new();
114              
115 1         433 foreach my $option_name (@remaining) {
116 2         24 $errors->add_exception(
117             Perl::ToPerl6::Exception::Configuration::Option::Global::ExtraParameter->new(
118             option_name => $option_name,
119             )
120             )
121             }
122              
123 1         6 $errors->rethrow();
124             }
125              
126 135         226 return;
127             }
128              
129             #-----------------------------------------------------------------------------
130             # Public ACCESSOR methods
131              
132             sub severity {
133 57     57 1 121 my ($self) = @_;
134 57         147 return $self->{_severity};
135             }
136              
137             #-----------------------------------------------------------------------------
138              
139             sub theme {
140 71     71 1 127 my ($self) = @_;
141 71         193 return $self->{_theme};
142             }
143              
144             #-----------------------------------------------------------------------------
145              
146             sub exclude {
147 75     75 1 144 my ($self) = @_;
148 75         270 return $self->{_exclude};
149             }
150              
151             #-----------------------------------------------------------------------------
152              
153             sub include {
154 75     75 1 135 my ($self) = @_;
155 75         334 return $self->{_include};
156             }
157              
158             #-----------------------------------------------------------------------------
159              
160             sub only {
161 75     75 1 127 my ($self) = @_;
162 75         226 return $self->{_only};
163             }
164              
165             #-----------------------------------------------------------------------------
166              
167             sub profile_strictness {
168 73     73 1 122 my ($self) = @_;
169 73         248 return $self->{_profile_strictness};
170             }
171              
172             #-----------------------------------------------------------------------------
173              
174             sub single_transformer {
175 73     73 1 116 my ($self) = @_;
176 73         235 return $self->{_single_transformer};
177             }
178              
179             #-----------------------------------------------------------------------------
180              
181             sub verbose {
182 75     75 1 116 my ($self) = @_;
183 75         255 return $self->{_verbose};
184             }
185              
186             #-----------------------------------------------------------------------------
187              
188             sub color {
189 78     78 1 142 my ($self) = @_;
190 78         220 return $self->{_color};
191             }
192              
193             #-----------------------------------------------------------------------------
194              
195             sub pager {
196 211     211 1 303 my ($self) = @_;
197 211         1421 return $self->{_pager};
198             }
199              
200             #-----------------------------------------------------------------------------
201              
202             sub allow_unsafe {
203 73     73 1 119 my ($self) = @_;
204 73         216 return $self->{_allow_unsafe};
205             }
206              
207             #-----------------------------------------------------------------------------
208              
209             sub mogrification_fatal {
210 75     75 1 110 my ($self) = @_;
211 75         280 return $self->{_mogrification_fatal};
212             }
213              
214             #-----------------------------------------------------------------------------
215              
216             sub force {
217 75     75 1 122 my ($self) = @_;
218 75         293 return $self->{_force};
219             }
220              
221             #-----------------------------------------------------------------------------
222              
223             sub top {
224 73     73 1 110 my ($self) = @_;
225 73         185 return $self->{_top};
226             }
227              
228             #-----------------------------------------------------------------------------
229              
230             sub color_severity_highest {
231 78     78 1 158 my ($self) = @_;
232 78         352 return $self->{_color_severity_highest};
233             }
234              
235             #-----------------------------------------------------------------------------
236              
237             sub color_severity_high {
238 78     78 1 137 my ($self) = @_;
239 78         290 return $self->{_color_severity_high};
240             }
241              
242             #-----------------------------------------------------------------------------
243              
244             sub color_severity_medium {
245 78     78 1 142 my ($self) = @_;
246 78         278 return $self->{_color_severity_medium};
247             }
248              
249             #-----------------------------------------------------------------------------
250              
251             sub color_severity_low {
252 78     78 1 128 my ($self) = @_;
253 78         257 return $self->{_color_severity_low};
254             }
255              
256             #-----------------------------------------------------------------------------
257              
258             sub color_severity_lowest {
259 78     78 1 139 my ($self) = @_;
260 78         272 return $self->{_color_severity_lowest};
261             }
262              
263             #-----------------------------------------------------------------------------
264              
265             sub program_extensions {
266 75     75 1 130 my ($self) = @_;
267 75         191 return $self->{_program_extensions};
268             }
269              
270             #-----------------------------------------------------------------------------
271              
272             1;
273              
274             __END__
275              
276             #-----------------------------------------------------------------------------
277              
278             =pod
279              
280             =head1 NAME
281              
282             Perl::ToPerl6::OptionsProcessor - The global configuration default values, combined with command-line values.
283              
284              
285             =head1 DESCRIPTION
286              
287             This is a helper class that encapsulates the default parameters for
288             constructing a L<Perl::ToPerl6::Config|Perl::ToPerl6::Config> object.
289             There are no user-serviceable parts here.
290              
291              
292             =head1 INTERFACE SUPPORT
293              
294             This is considered to be a non-public class. Its interface is subject
295             to change without notice.
296              
297              
298             =head1 CONSTRUCTOR
299              
300             =over
301              
302             =item C< new( %DEFAULT_PARAMS ) >
303              
304             Returns a reference to a new C<Perl::ToPerl6::OptionsProcessor> object.
305             You can override the coded defaults by passing in name-value pairs
306             that correspond to the methods listed below.
307              
308             This is usually only invoked by
309             L<Perl::ToPerl6::UserProfile|Perl::ToPerl6::UserProfile>, which passes
310             in the global values from a F<.perlmogrifyrc> file. This object
311             contains no information for individual Transformers.
312              
313             =back
314              
315             =head1 METHODS
316              
317             =over
318              
319             =item C< exclude() >
320              
321             Returns a reference to a list of the default exclusion patterns. If
322             onto by
323             L<Perl::ToPerl6::TransformeryParameter|Perl::ToPerl6::TransformerParameter>. there
324             are no default exclusion patterns, then the list will be empty.
325              
326              
327             =item C< force() >
328              
329             Returns the default value of the C<force> flag (Either 1 or 0).
330              
331              
332             =item C< include() >
333              
334             Returns a reference to a list of the default inclusion patterns. If
335             there are no default exclusion patterns, then the list will be empty.
336              
337              
338             =item C< only() >
339              
340             Returns the default value of the C<only> flag (Either 1 or 0).
341              
342              
343             =item C< profile_strictness() >
344              
345             Returns the default value of C<profile_strictness> as an unvalidated
346             string.
347              
348              
349             =item C< single_transformer() >
350              
351             Returns the default C<single-transformer> pattern. (As a string.)
352              
353              
354             =item C< severity() >
355              
356             Returns the default C<severity> setting. (1..5).
357              
358              
359             =item C< theme() >
360              
361             Returns the default C<theme> setting. (As a string).
362              
363              
364             =item C< top() >
365              
366             Returns the default C<top> setting. (Either 0 or a positive integer).
367              
368              
369             =item C< verbose() >
370              
371             Returns the default C<verbose> setting. (Either a number or format
372             string).
373              
374              
375             =item C< color() >
376              
377             Returns the default C<color> setting. (Either 1 or 0).
378              
379              
380             =item C< pager() >
381              
382             Returns the default C<pager> setting. (Either empty string or the pager
383             command string).
384              
385              
386             =item C< allow_unsafe() >
387              
388             Returns the default C<allow-unsafe> setting. (Either 1 or 0).
389              
390              
391             =item C< mogrification_fatal() >
392              
393             Returns the default C<mogrification-fatal> setting (Either 1 or 0).
394              
395             =item C< color_severity_highest() >
396              
397             Returns the color to be used for coloring highest severity transformations.
398              
399             =item C< color_severity_high() >
400              
401             Returns the color to be used for coloring high severity transformations.
402              
403             =item C< color_severity_medium() >
404              
405             Returns the color to be used for coloring medium severity transformations.
406              
407             =item C< color_severity_low() >
408              
409             Returns the color to be used for coloring low severity transformations.
410              
411             =item C< color_severity_lowest() >
412              
413             Returns the color to be used for coloring lowest severity transformations.
414              
415             =item C< program_extensions() >
416              
417             Returns a reference to the array of file name extensions to be interpreted as
418             representing Perl programs.
419              
420             =back
421              
422              
423             =head1 SEE ALSO
424              
425             L<Perl::ToPerl6::Config|Perl::ToPerl6::Config>,
426             L<Perl::ToPerl6::UserProfile|Perl::ToPerl6::UserProfile>
427              
428              
429             =head1 AUTHOR
430              
431             Jeffrey Ryan Thalhammer <jeff@imaginative-software.com>
432              
433              
434             =head1 COPYRIGHT
435              
436             Copyright (c) 2005-2011 Imaginative Software Systems. All rights reserved.
437              
438             This program is free software; you can redistribute it and/or modify
439             it under the same terms as Perl itself. The full text of this license
440             can be found in the LICENSE file included with this module.
441              
442             =cut
443              
444             # Local Variables:
445             # mode: cperl
446             # cperl-indent-level: 4
447             # fill-column: 78
448             # indent-tabs-mode: nil
449             # c-indentation-style: bsd
450             # End:
451             # ex: set ts=8 sts=4 sw=4 tw=78 ft=perl expandtab shiftround :