use MooseX::Getopt::Meta::Attribute;
use MooseX::Getopt::Meta::Attribute::NoGetopt;
+use Carp ();
+
use Getopt::Long (); # GLD uses it anyway, doesn't hurt
use constant HAVE_GLD => not not eval { require Getopt::Long::Descriptive };
-our $VERSION = '0.12_01';
+our $VERSION = '0.13';
our $AUTHORITY = 'cpan:STEVAN';
has ARGV => (is => 'rw', isa => 'ArrayRef', metaclass => "NoGetopt");
}
}
+ my $constructor_params = ( @params == 1 ? $params[0] : {@params} );
+
+ Carp::croak("Single parameters to new_with_options() must be a HASH ref")
+ unless ref($constructor_params) eq 'HASH';
+
my %processed = $class->_parse_argv(
options => [
$class->_attrs_to_options( $config_from_file )
- ]
+ ],
+ params => $constructor_params,
);
my $params = $config_from_file ? { %$config_from_file, %{$processed{params}} } : $processed{params};
my ( @options, %name_to_init_arg );
+ my $constructor_params = $params{params};
+
foreach my $opt ( @{ $params{options} } ) {
push @options, [
$opt->{opt_string},
$opt->{doc} || ' ', # FIXME new GLD shouldn't need this hack
{
- ( $opt->{required} ? (required => $opt->{required}) : () ),
+ ( ( $opt->{required} && !exists($constructor_params->{$opt->{init_arg}}) ) ? (required => $opt->{required}) : () ),
( exists $opt->{default} ? (default => $opt->{default}) : () ),
},
];
constraint defined, it will configure Getopt::Long to handle the option
accordingly.
-You can use the attribute metaclass L<MooseX::Getopt::Meta::Attribute>
-to get non-default commandline option names and aliases.
+You can use the trait L<MooseX::Getopt::Meta::Attribute::Trait> or the
+attribute metaclass L<MooseX::Getopt::Meta::Attribute> to get non-default
+commandline option names and aliases.
-You can use the attribute metaclass L<MooseX::Getopt::Meta::Attribute::NoGetOpt>
+You can use the trait L<MooseX::Getopt::Meta::Attribute::Trait::NoGetopt>
+or the attribute metaclass L<MooseX::Getopt::Meta::Attribute::NoGetopt>
to have C<MooseX::Getopt> ignore your attribute in the commandline options.
By default, attributes which start with an underscore are not given