File Coverage

blib/lib/Getopt/Kingpin/Args.pm
Criterion Covered Total %
statement 54 54 100.0
branch 6 6 100.0
condition n/a
subroutine 13 13 100.0
pod 6 6 100.0
total 79 79 100.0


line stmt bran cond sub pod time code
1             package Getopt::Kingpin::Args;
2 28     28   654 use 5.008001;
  28         92  
3 28     28   138 use strict;
  28         47  
  28         572  
4 28     28   128 use warnings;
  28         47  
  28         871  
5 28     28   148 use Object::Simple -base;
  28         56  
  28         143  
6 28     28   13171 use Getopt::Kingpin::Arg;
  28         68  
  28         262  
7 28     28   739 use Carp;
  28         52  
  28         14220  
8              
9             our $VERSION = "0.09";
10              
11             has _args => sub {
12             return [];
13             };
14              
15             has _args_remain => sub {
16             return [];
17             };
18              
19             sub add {
20 100     100 1 343 my $self = shift;
21 100         283 my $hash = {@_};
22 100         254 my ($name, $description) = ($hash->{name}, $hash->{description});
23              
24 100         379 my $arg = Getopt::Kingpin::Arg->new(
25             name => $name,
26             description => $description,
27             );
28 100         586 push @{$self->_args}, $arg;
  100         1591  
29              
30 100         425 return $arg;
31             }
32              
33             sub count {
34 531     531 1 3302 my $self = shift;
35 531         652 return scalar @{$self->_args};
  531         7542  
36             }
37              
38             sub get {
39 4     4 1 988 my $self = shift;
40 4         9 my ($name) = @_;
41              
42 4         11 foreach my $arg ($self->get_all) {
43 5 100       105 if ($arg->name eq $name) {
44 3         29 return $arg;
45             }
46             }
47 1         21 croak "get($name) failed";
48             }
49              
50             sub get_by_index {
51 199     199 1 1470 my $self = shift;
52 199         301 my ($index) = @_;
53              
54 199 100       340 if ($self->count <= $index) {
55 1         9 return;
56             }
57              
58 198         3723 return $self->_args->[$index];
59             }
60              
61             sub get_all {
62 76     76 1 230 my $self = shift;
63 76         102 return @{$self->_args};
  76         1162  
64             }
65              
66             sub _help_length {
67 15     15   30 my $self = shift;
68              
69 15         23 my $max_length_of_arg = 0;
70 15         34 foreach my $arg ($self->get_all) {
71 27 100       135 if ($max_length_of_arg < length $arg->help_name) {
72 17         41 $max_length_of_arg = length $arg->help_name;
73             }
74             }
75 15         28 return $max_length_of_arg;
76              
77             }
78              
79             sub help {
80 15     15 1 102 my $self = shift;
81 15         28 my $ret = "";
82              
83 15         33 $ret .= "Args:\n";
84              
85 15         41 my $len = $self->_help_length;
86 15         42 foreach my $arg ($self->get_all) {
87 27         215 $ret .= sprintf " %-${len}s %s\n",
88             $arg->help_name,
89             $arg->description;
90             }
91              
92 15         318 return $ret;
93             }
94              
95             1;
96             __END__