# ============================================================================
package MooseX::App::Plugin::Term;
# ============================================================================

use 5.010;
use utf8;

use namespace::autoclean;
use Moose::Role;

sub plugin_metaroles {
    my ($self,$class) = @_;

    return {
        class       => ['MooseX::App::Plugin::Term::Meta::Class'],
        attribute   => ['MooseX::App::Plugin::Term::Meta::Attribute'],



=encoding utf8

=head1 NAME

MooseX::App::Plugin::Term - Allows one to specify options/parameters via terminal prompts


In your base class:

 package MyApp;
 use MooseX::App qw(Term);

In your command class:

 package MyApp::SomeCommand;
 use MooseX::App::Command;
 option 'some_option' => (
     is             => 'rw',
     isa            => 'Int',
     documentation  => 'Something',
     cmd_term       => 1,
 sub run {
     my ($self) = @_;
     say "Some option is ".$self->some_option;

In your shell

 bash$ myapp some_command
 Something (Required, an integer):
 Value must be an integer (not 'test')
 Some option is 1


This plugin can prompt the user for missing options/parameters on the
terminal. The user will only be promted if the parameter were not provided
by different means (parameter and option or config files and environment
values if the respectice plugins have been loaded before this plugin) and
if the script is connected to an interactive terminal.

Term input has basic editing capabilities (cursor, del, backspace and history)