File Coverage

blib/lib/Getopt/Yath/Settings.pm
Criterion Covered Total %
statement 28 54 51.8
branch 5 16 31.2
condition 0 5 0.0
subroutine 8 15 53.3
pod 5 9 55.5
total 46 99 46.4


line stmt bran cond sub pod time code
1             package Getopt::Yath::Settings;
2 1     1   5 use strict;
  1         1  
  1         31  
3 1     1   4 use warnings;
  1         2  
  1         67  
4              
5             our $VERSION = '2.000007';
6              
7 1     1   6 use Carp();
  1         1  
  1         15  
8              
9 1     1   439 use Getopt::Yath::Settings::Group;
  1         2  
  1         51  
10              
11 1     1   6 use Getopt::Yath::Util qw/decode_json decode_json_file/;
  1         1  
  1         10  
12              
13             sub new {
14 64     64 0 85 my $class = shift;
15 64 50       126 my $self = @_ == 1 ? $_[0] : { @_ };
16              
17 64         100 bless($self, $class);
18              
19 64         182 Getopt::Yath::Settings::Group->new($_) for values %$self;
20              
21 64         170 return $self;
22             }
23              
24             sub maybe {
25 0     0 1 0 my $self = shift;
26 0         0 my ($group, $opt, $default) = @_;
27              
28 0 0       0 return $default unless $self->check_group($group);
29              
30 0         0 my $g = $self->$group;
31              
32 0 0       0 return $default unless $g->check_option($opt);
33              
34 0   0     0 return $g->$opt // $default;
35             }
36              
37 0   0 0 1 0 sub check_group { $_[0]->{$_[1]} // 0 }
38              
39             sub group {
40 1426     1426 1 1769 my $self = shift;
41 1426         2555 my ($group, $vivify) = @_;
42              
43 1426 100       3108 return $self->{$group} if $self->{$group};
44              
45 62 50       196 return $self->{$group} = Getopt::Yath::Settings::Group->new()
46             if $vivify;
47              
48 0         0 Carp::confess("The '$group' group is not defined");
49             }
50              
51             sub create_group {
52 0     0 1 0 my $self = shift;
53 0         0 my ($name, @vals) = @_;
54              
55 0 0       0 return $self->{$name} = Getopt::Yath::Settings::Group->new(@vals == 1 ? $vals[0] : { @vals });
56             }
57              
58             sub delete_group {
59 0     0 1 0 my $self = shift;
60 0         0 my ($name) = @_;
61              
62 0         0 delete $self->{$name};
63             }
64              
65             our $AUTOLOAD;
66             sub AUTOLOAD {
67 64     64   9592 my $this = shift;
68              
69 64         130 my $group = $AUTOLOAD;
70 64         386 $group =~ s/^.*:://g;
71              
72 64 50       406 return if $group eq 'DESTROY';
73              
74 0 0         Carp::confess("Method $group() must be called on a blessed instance") unless ref($this);
75              
76 0           $this->group($group);
77             }
78              
79             sub FROM_JSON_FILE {
80 0     0 0   my $class = shift;
81 0           my ($file, %params) = @_;
82              
83 0           my $data = decode_json_file($file, %params);
84 0           $class->new($data);
85             }
86              
87             sub FROM_JSON {
88 0     0 0   my $class = shift;
89 0           my ($json) = @_;
90              
91 0           my $data = decode_json($json);
92 0           $class->new($data);
93             }
94              
95             sub TO_JSON {
96 0     0 0   my $self = shift;
97 0           return {%$self};
98             }
99              
100             1;
101              
102             __END__