summaryrefslogtreecommitdiff
path: root/lib/Getopt/Dakkar/Option.pm
blob: 0dfd882102a5d6c49d9d1dc469778f474e2e4b1a (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
32
33
34
35
36
37
38
package Getopt::Dakkar::Option; 
use Getopt::Dakkar::Style qw(class);
with 'Getopt::Dakkar::Role::Piece';
# VERSION 
# ABSTRACT: an option 
 
has can_bundle => ( is => 'ro'isa => Bool, default => 0 );
has parameters => ( is => 'ro'isa => ArrayRef, default => sub { [] } );
 
sub match($self,$arg) {
    for my $candidate ($self->matching_strings->@*) {
        if (length($candidate)==1) {
            return 1 if $arg eq "-$candidate";
            return 1 if $self->can_bundle && $arg =~ /^-\Q$candidate/;
        }
        else {
            return 1 if $arg eq "--$candidate";
        }
    }
    return 0;
}
 
sub parse($self,$args,$stash) {
    my $my_option = shift $args->@*;
 
    # first, get arguments if needed 
    for my $parameter ($self->parameters->@*) {
        my $argument = $parameter->parse($args,$stash);
        # aaarg,  
    }
 
    # then, remove the option and put the bundle back, if needed 
    if ($my_option =~ /^-[^-]+/) { # we're in a bundle 
        $my_option =~ s{^-.}{-};
        unshift $args->@*, $my_option;
    }
    return $the_option_argument;
}