summaryrefslogtreecommitdiff
path: root/lib/Getopt/Dakkar/Role/Piece.pm
blob: 81c89e7a3dae596f96a3cdb9473044595b0b8fc2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package Getopt::Dakkar::Role::Piece; 
use Getopt::Dakkar::Style qw(role);
# VERSION 
# ABSTRACT: a piece 
 
has name => ( is => 'ro'isa => Str, required => 1 );
has aliases => ( is => 'ro'isa => ArrayRef[Str], default => sub { [] } );
has matching_strings => (
    is => 'lazy',
    isa => ArrayRef[Str],
    init_arg => 'matches',
);
sub _build_matching_strings($self) { [ $self->name, $self->aliases->@* ] }
 
has class => ( is => 'ro'isa => ClassName, default => 'Getopt::Dakkar::Stash' );
has object => ( is => 'ro'isa => Object );
has op => ( is => 'ro'isa => Str|CodeRef );
 
sub make_stash($self,$argpack) {
    if (my $o = $self->object) { return $o }
 
    my $class = use_module($self->class);
    if (my $from_argpack = $class->can('new_from_argpack')) {
        return $class->$from_argpack($argpack);
    }
    else {
        return $class->new();
    }
}
 
requires qw(parse match);