package Getopt::Kingpin::Commands;
use 5.008001;
use strict;
use warnings;
use Object::Simple -base;
use Getopt::Kingpin::Command;
use Carp;
our $VERSION = "0.10";
has _commands => sub {
return [];
};
sub add {
my $self = shift;
my $hash = {@_};
my ($name, $description, $parent) = ($hash->{name}, $hash->{description}, $hash->{parent});
my $command = Getopt::Kingpin::Command->new(name => $name, description => $description, parent => $parent);
push @{$self->_commands}, $command;
return $command;
}
sub count {
my $self = shift;
return scalar @{$self->_commands};
}
sub get {
my $self = shift;
my ($name) = @_;
foreach my $cmd (@{$self->_commands}) {
if ($cmd->name eq $name) {
return $cmd;
}
}
return;
}
sub get_all {
my $self = shift;
return @{$self->_commands};
}
sub help {
my $self = shift;
my $ret = "";
$ret .= "Commands:\n";
foreach my $cmd ($self->get_all) {
if ($cmd->commands->count > 1) {
foreach my $sub ($cmd->commands->get_all) {
next if $sub->name eq "help";
$ret .= sprintf " %s %s\n", $cmd->name, $sub->name;
$ret .= sprintf " %s\n", $sub->description;
$ret .= sprintf "\n";
}
} else {
$ret .= sprintf " %s\n", $cmd->help_short;
$ret .= sprintf " %s\n", $cmd->description;
$ret .= sprintf "\n";
}
}
return $ret;
}
1;
__END__
=encoding utf-8
=head1 NAME
Getopt::Kingpin::Commands - command line option object
=head1 SYNOPSIS
use Getopt::Kingpin::Commands;
my $commands = Getopt::Kingpin::Commands->new;
$commands->add(
name => 'post',
description => 'post image',
);
=head1 DESCRIPTION
Getopt::Kingpin::Commands is used from Getopt::Kingpin.
=head1 METHOD
=head2 new()
Create Getopt::Kingpin::Commands object.
=head2 add(name => $name, description => $description)
Add Getopt::Kingpin::Command instance which has $name and $description.
=head2 count()
Get count of Getopt::Kingpin::Command objects.
=head2 get($name)
Get Getopt::Kingpin::Arg instance by $name.
=head2 get_all()
Get all Getopt::Kingpin::Commands instances.
=head2 help()
Return help message.
=head1 LICENSE
Copyright (C) sago35.
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=head1 AUTHOR
sago35 E<lt>sago35@gmail.comE<gt>
=cut