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   3 use warnings;
  1         2  
  1         68  
4              
5             our $VERSION = '2.000008';
6              
7 1     1   4 use Getopt::Yath::Util qw/decode_json/;
  1         1  
  1         9  
8              
9 1     1   29 use parent 'Getopt::Yath::Option';
  1         1  
  1         8  
10 1     1   55 use Getopt::Yath::HashBase qw/
  1         2  
  1         21  
11              
12 8     8 0 12 sub allows_list { 1 }
13 8     8 0 21 sub allows_arg { 1 }
14 8     8 0 17 sub requires_arg { 1 }
15 2     2 0 5 sub allows_default { 1 }
16 0     0 0 0 sub allows_autofill { 0 }
17 1     1 0 4 sub requires_autofill { 0 }
18              
19 4     4 0 31 sub notes { (shift->SUPER::notes(), 'Can be specified multiple times') }
20              
21 28 50   28 0 25 sub is_populated { ${$_[1]} && @{${$_[1]}} }
  28         27  
  28         74  
  28         46  
22              
23             sub get_clear_value {
24 2     2 0 2 my $self = shift;
25 2   50     6 return $self->_get___value(CLEAR(), @_) // [];
26             }
27              
28             sub get_initial_value {
29 32     32 0 34 my $self = shift;
30              
31 32         29 my @val;
32              
33 32         44 my $env = $self->from_env_vars;
34 32 50       28 for my $name (@{$env || []}) {
  32         61  
35 0 0       0 push @val => $ENV{$name} if defined $ENV{$name};
36             }
37              
38 32 50       49 return \@val if @val;
39              
40 32 50       46 return undef if $self->{+MAYBE};
41 32   50     46 return $self->_get___value(INITIALIZE()) // [];
42             }
43              
44             sub add_value {
45 64     64 0 103 my $self = shift;
46 64         92 my ($ref, @val) = @_;
47 64 50 33     131 return if $self->maybe && !@val;
48 64         65 push @{$$ref} => @val;
  64         196  
49             }
50              
51             sub normalize_value {
52 7     7 0 10 my $self = shift;
53 7         12 my (@input) = @_;
54              
55 7 50       18 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         6 my @output;
67 7 50       14 if (my $on = $self->split_on) {
68 7         13 @output = map { $self->SUPER::normalize_value($_) } map { split($on, $_) } @input;
  15         30  
  7         115  
69             }
70             else {
71 0         0 @output = map { $self->SUPER::normalize_value($_) } @input;
  0         0  
72             }
73              
74 7         18 return @output;
75             }
76              
77 2     2 0 5 sub inject_default_long_examples { qq{ '["json","list"]'}, qq{='["json","list"]'} }
78 2     2 0 3 sub inject_default_short_examples { qq{ '["json","list"]'}, qq{='["json","list"]'} }
79              
80             sub default_long_examples {
81 4     4 0 6 my $self = shift;
82 4         6 my %params = @_;
83              
84 4         11 my $list = $self->SUPER::default_long_examples(%params);
85 4         12 push @$list => $self->inject_default_long_examples();
86 4         12 return $list;
87             }
88              
89             sub default_short_examples {
90 4     4 0 4 my $self = shift;
91 4         8 my %params = @_;
92              
93 4         8 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__