X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FGetopt.pm;h=49ac04895c93b81f508c10c69a273812e9bbe495;hb=96df119bc747eb5823ba0490cf7d71d2dc457f6a;hp=8eda924496039246cc07615b6d78639b0f2b537a;hpb=8a29a50d34d57607b72e29b62904f824a7f9dc51;p=gitmo%2FMooseX-Getopt.git diff --git a/lib/MooseX/Getopt.pm b/lib/MooseX/Getopt.pm index 8eda924..49ac048 100644 --- a/lib/MooseX/Getopt.pm +++ b/lib/MooseX/Getopt.pm @@ -1,5 +1,9 @@ package MooseX::Getopt; + +our $VERSION = '0.150001'; +our $AUTHORITY = 'cpan:STEVAN'; + use Moose::Role; use Moose::Util::TypeConstraints; @@ -15,18 +19,14 @@ use MooseX::Getopt::Meta::Attribute::NoGetopt; use Getopt::Long (); -our $VERSION = '0.150001'; -our $AUTHORITY = 'cpan:STEVAN'; - - use constant _default_getopt_session => 'MooseX::Getopt::Session'; has getopt => ( - is => 'rw', - isa => 'MooseX::Getopt::Session', + is => 'rw', + isa => 'MooseX::Getopt::Session', metaclass => 'NoGetopt', - handles => [ 'ARGV', 'extra_argv' ], + handles => [ 'ARGV', 'extra_argv' ], ); @@ -40,24 +40,28 @@ sub new_with_options { sub get_options_from_argv { my $class = shift; - Moose->throw_error("Single parameters to get_options_from_argv() must be a HASH ref") - if ref $_[0] and ref $_ ne 'HASH'; + Moose->throw_error( + "Single parameters to get_options_from_argv() must be a HASH ref" + ) if ref $_[0] and ref $_ ne 'HASH'; - my $options = { %{ $class->get_options_from_configfile }, @_ == 1 ? %{ $_[0] } : @_ }; + my $options = { + %{ $class->get_options_from_configfile }, + @_ == 1 ? %{ $_[0] } : @_ + }; my $getopt = defined $options->{getopt} - ? $options->{getopt} - : $class->_default_getopt_session->new( - classes_filter => sub { $_ eq $class }, - options => $options, - ); + ? $options->{getopt} + : $class->_default_getopt_session->new( + classes_filter => sub { $_ eq $class }, + options => $options, + ); # Call Getopt parser only once. $getopt->build_options if not $getopt->has_status; my $new_options = { - %{ $options }, # explicit options to ->new - %{ $getopt->options }, # options from CLI + %$options, # explicit options to ->new + %{ $getopt->options }, # options from CLI getopt => $getopt, }; @@ -70,19 +74,19 @@ sub get_options_from_configfile { my $options = {}; - if ($class->meta->does_role('MooseX::ConfigFromFile')) { + if ( $class->meta->does_role('MooseX::ConfigFromFile') ) { local @ARGV = @ARGV; my $configfile; - my $opt_parser = Getopt::Long::Parser->new( config => [ 'pass_through' ] ); + my $opt_parser = Getopt::Long::Parser->new( config => ['pass_through'] ); $opt_parser->getoptions( "configfile=s" => \$configfile ); - if (not defined $configfile) { + if ( not defined $configfile ) { my $cfmeta = $class->meta->find_attribute_by_name('configfile'); $configfile = $cfmeta->default if $cfmeta->has_default; }; - if (defined $configfile) { + if ( defined $configfile ) { $options = $class->get_config_from_file($configfile); }; }; @@ -96,8 +100,7 @@ sub _compute_getopt_attrs { return grep { $_->does('MooseX::Getopt::Meta::Attribute::Trait') - or - $_->name !~ /^_/ + or $_->name !~ /^_/ } grep { !$_->does('MooseX::Getopt::Meta::Attribute::Trait::NoGetopt') } $class->meta->compute_all_applicable_attributes; @@ -106,6 +109,7 @@ sub _compute_getopt_attrs { no Moose::Role; 1; + __END__ =pod @@ -203,6 +207,11 @@ which would enable the following command line options: These type constraints are set up as properly typed options with Getopt::Long, using the C<=i>, C<=f> and C<=s> modifiers as appropriate. +=item I, I, I + +These type constaints are set up as properly typed options with +Getopt::Long, using the C<:i>, C<:f> and C<:s> modifiers as appropriate. + =item I An I type constraint is set up as a multiple value option @@ -402,12 +411,12 @@ Brandon L. Black, Eblblack@gmail.comE Yuval Kogman, Enothingmuch@woobling.orgE +Piotr Roszatycki, Edexter@cpan.orgE + =head1 CONTRIBUTORS Ryan D Johnson, Eryan@innerfence.comE -Piotr Roszatycki, Edexter@cpan.orgE - =head1 COPYRIGHT AND LICENSE Copyright 2007-2008 by Infinity Interactive, Inc.