File Coverage

blib/lib/Getopt/Yath/Option/List.pm
Criterion Covered Total %
statement 61 75 81.3
branch 7 18 38.8
condition 3 7 42.8
subroutine 20 21 95.2
pod 0 16 0.0
total 91 137 66.4


line stmt bran cond sub pod time code
1             package Getopt::Yath::Option::List;
2 1     1   6 use strict;
  1         1  
  1         32  
3 1     1   2 use warnings;
  1         2  
  1         67  
4              
5             our $VERSION = '2.000007';
6              
7 1     1   4 use Getopt::Yath::Util qw/decode_json/;
  1         1  
  1         9  
8              
9 1     1   30 use parent 'Getopt::Yath::Option';
  1         1  
  1         9  
10 1     1   51 use Getopt::Yath::HashBase qw/
  1         2  
  1         6  
11              
12 8     8 0 11 sub allows_list { 1 }
13 8     8 0 22 sub allows_arg { 1 }
14 8     8 0 15 sub requires_arg { 1 }
15 2     2 0 34 sub allows_default { 1 }
16 0     0 0 0 sub allows_autofill { 0 }
17 1     1 0 3 sub requires_autofill { 0 }
18              
19 4     4 0 13 sub notes { (shift->SUPER::notes(), 'Can be specified multiple times') }
20              
21 28 50   28 0 44 sub is_populated { ${$_[1]} && @{${$_[1]}} }
  28         40  
  28         87  
  28         62  
22              
23             sub get_clear_value {
24 2     2 0 4 my $self = shift;
25 2   50     9 return $self->_get___value(CLEAR(), @_) // [];
26             }
27              
28             sub get_initial_value {
29 32     32 0 50 my $self = shift;
30              
31 32         45 my @val;
32              
33 32         60 my $env = $self->from_env_vars;
34 32 50       43 for my $name (@{$env || []}) {
  32         113  
35 0 0       0 push @val => $ENV{$name} if defined $ENV{$name};
36             }
37              
38 32 50       65 return \@val if @val;
39              
40 32 50       86 return undef if $self->{+MAYBE};
41 32   50     89 return $self->_get___value(INITIALIZE()) // [];
42             }
43              
44             sub add_value {
45 64     64 0 186 my $self = shift;
46 64         125 my ($ref, @val) = @_;
47 64 50 33     152 return if $self->maybe && !@val;
48 64         99 push @{$$ref} => @val;
  64         294  
49             }
50              
51             sub normalize_value {
52 7     7 0 12 my $self = shift;
53 7         17 my (@input) = @_;
54              
55 7 50       20 if ($input[0] =~ m/^\s*\[.*\]\s*$/s) {
56 0         0 my $out;
57 0         0 local $@;
58 0 0       0 unless (eval { local $SIG{__DIE__}; $out = decode_json($input[0]); 1 }) {
  0         0  
  0         0  
  0         0  
59 0         0 my ($err) = split /[\n\r]+/, $@;
60 0         0 $err =~ s{at \Q$INC{'Getopt/Yath/Util/JSON.pm'}\E line \d+\..*$}{};
61 0         0 die "Could not decode JSON string: $err\n====\n$input[0]\n====\n";
62             }
63 0         0 return @$out;
64             }
65              
66 7         8 my @output;
67 7 50       21 if (my $on = $self->split_on) {
68 7         14 @output = map { $self->SUPER::normalize_value($_) } map { split($on, $_) } @input;
  15         45  
  7         142  
69             }
70             else {
71 0         0 @output = map { $self->SUPER::normalize_value($_) } @input;
  0         0  
72             }
73              
74 7         34 return @output;
75             }
76              
77 2     2 0 7 sub inject_default_long_examples { qq{ '["json","list"]'}, qq{='["json","list"]'} }
78 2     2 0 4 sub inject_default_short_examples { qq{ '["json","list"]'}, qq{='["json","list"]'} }
79              
80             sub default_long_examples {
81 4     4 0 5 my $self = shift;
82 4         7 my %params = @_;
83              
84 4         11 my $list = $self->SUPER::default_long_examples(%params);
85 4         14 push @$list => $self->inject_default_long_examples();
86 4         13 return $list;
87             }
88              
89             sub default_short_examples {
90 4     4 0 5 my $self = shift;
91 4         13 my %params = @_;
92              
93 4         9 my $list = $self->SUPER::default_long_examples(%params);
94 4         11 push @$list => $self->inject_default_short_examples();
95 4         10 return $list;
96             }
97              
98              
99             1;
100              
101             __END__