The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

package Mail::Summary::Tools::CLI::Command;
use base qw/App::Cmd::Command/;

use strict;
use warnings;

sub opt_spec {
	my ( $self, $app ) = @_;

	my @options = $self->options;

	foreach my $option ( @options ) {
		my $opts = $option->[2] ||= {};
		my ($name) = ($option->[0] =~ /^(\w+)/);
		if ( defined( my $default = $self->option_config( $app, $name ) ) ) {
			$opts->{default} = $default; # clobber the default one with the user's value
		}
	}

	unshift @options, $self->extra_options;

	return @options;
}

sub validate_args {
	my ( $self, $opt, $args ) = @_;
	print $self->_usage_text and exit if $opt->{help};
	$self->validate( $opt, $args );
}

sub extra_options {
	my ( $self, $app ) = @_;
    [ help => 'This help screen' ];
}

sub option_config {
	my ( $self, $app, $option ) = @_;
	my ( $cmd ) = $self->command_names;
	( $app->config || $app->app->config )->option_value( $cmd => $option );
}

sub diag {
	my ( $self, @message ) = @_;
	return unless $self->app->global_options->{verbose};
	my $message = "@message";
	chomp $message;
	warn "$message\n";
}

__PACKAGE__;

__END__

=pod

=head1 NAME

Mail::Summary::Tools::CLI::Command - 

=head1 SYNOPSIS

	use Mail::Summary::Tools::CLI::Command;

=head1 DESCRIPTION

=cut