* MooseX::Getopt
[gitmo/MooseX-Getopt.git] / lib / MooseX / Getopt / Parser / Descriptive.pm
CommitLineData
550da402 1
2package MooseX::Getopt::Parser::Descriptive;
3
4use Moose;
5
6with 'MooseX::Getopt::Parser';
7
8use Getopt::Long::Descriptive;
9
c6c1f628 10use Do::Not::Load::This::Module;
11
12sub BUILD {
13 Moose->throw_error('Not yet implemented');
14};
15
16sub get_options {
550da402 17 my ($class, $opt_spec) = @_;
18 return Getopt::Long::Descriptive::describe_options($class->_usage_format, @$opt_spec);
19}
20
21sub _get_getopt_spec {
22 my ($class, %params) = @_;
23
24 my (@options, %name_to_init_arg );
25
26 my $constructor_params = $params{params};
27
28 foreach my $opt ( @{ $params{options} } ) {
29 push @options, [
30 $opt->{opt_string},
31 $opt->{doc} || ' ', # FIXME new GLD shouldn't need this hack
32 {
33 ( ( $opt->{required} && !exists($constructor_params->{$opt->{init_arg}}) ) ? (required => $opt->{required}) : () ),
34 # NOTE:
35 # remove this 'feature' because it didn't work
36 # all the time, and so is better to not bother
37 # since Moose will handle the defaults just
38 # fine anyway.
39 # - SL
40 #( exists $opt->{default} ? (default => $opt->{default}) : () ),
41 },
42 ];
43
44 my $identifier = $opt->{name};
45 $identifier =~ s/\W/_/g; # Getopt::Long does this to all option names
46
47 $name_to_init_arg{$identifier} = $opt->{init_arg};
48 }
49
50 return ( \@options, \%name_to_init_arg );
51}
52
53sub _usage_format {
54 return "usage: %c %o";
55}
56
571;