X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FGetopt.pm;h=6d1ab259d53bd5f405ac9689aefae29019e3d002;hb=0f8232b66e0f72e35099ce203962a4efc23838cf;hp=c773e22a1facc601d6e73f476d617c7fcd8fbf7c;hpb=ee211848ee47820075d174225f566dbb38517657;p=gitmo%2FMooseX-Getopt.git diff --git a/lib/MooseX/Getopt.pm b/lib/MooseX/Getopt.pm index c773e22..6d1ab25 100644 --- a/lib/MooseX/Getopt.pm +++ b/lib/MooseX/Getopt.pm @@ -6,22 +6,27 @@ use Getopt::Long (); use MooseX::Getopt::OptionTypeMap; use MooseX::Getopt::Meta::Attribute; +use MooseX::Getopt::Meta::Attribute::NoGetopt; -our $VERSION = '0.05'; +our $VERSION = '0.06'; our $AUTHORITY = 'cpan:STEVAN'; has ARGV => (is => 'rw', isa => 'ArrayRef'); has extra_argv => (is => 'rw', isa => 'ArrayRef'); sub new_with_options { - my ($class, %params) = @_; + my ($class, @params) = @_; - my %processed = $class->_parse_argv( options => [ $class->_attrs_to_options( %params ) ] ); + my %processed = $class->_parse_argv( + options => [ + $class->_attrs_to_options( @params ) + ] + ); $class->new( ARGV => $processed{argv_copy}, extra_argv => $processed{argv}, - %params, # explicit params to ->new + @params, # explicit params to ->new %{ $processed{params} }, # params from CLI ); } @@ -60,12 +65,23 @@ sub _parse_argv { ); } +sub _compute_getopt_attrs { + my $class = shift; + grep { + $_->isa("MooseX::Getopt::Meta::Attribute") + or + $_->name !~ /^_/ + && + !$_->isa('MooseX::Getopt::Meta::Attribute::NoGetopt') + } $class->meta->compute_all_applicable_attributes +} + sub _attrs_to_options { my $class = shift; my @options; - foreach my $attr ($class->meta->compute_all_applicable_attributes) { + foreach my $attr ($class->_compute_getopt_attrs) { my $name = $attr->name; my $aliases; @@ -74,9 +90,6 @@ sub _attrs_to_options { $name = $attr->cmd_flag if $attr->has_cmd_flag; $aliases = $attr->cmd_aliases if $attr->has_cmd_aliases; } - else { - next if $name =~ /^_/; - } my $opt_string = $aliases ? join(q{|}, $name, @$aliases) @@ -149,6 +162,9 @@ accordingly. You can use the attribute metaclass L to get non-default commandline option names and aliases. +You can use the attribute metaclass L +to have C ignore your attribute in the commandline options. + By default, attributes which start with an underscore are not given commandline argument support, unless the attribute's metaclass is set to L. If you don't want you accessors