File Coverage

blib/lib/Perl/ToPerl6/OptionsProcessor.pm
Criterion Covered Total %
statement 100 104 96.1
branch 2 4 50.0
condition 1 3 33.3
subroutine 32 32 100.0
pod 21 21 100.0
total 156 164 95.1


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