Make option warning eacy to override for Catalyst. Needs tests
[gitmo/MooseX-Getopt.git] / lib / MooseX / Getopt.pm
index 055eee3..b942d84 100644 (file)
@@ -11,7 +11,7 @@ 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.23';
+our $VERSION   = '0.24';
 our $AUTHORITY = 'cpan:STEVAN';
 
 has ARGV       => (is => 'rw', isa => 'ArrayRef', metaclass => "NoGetopt");
@@ -51,7 +51,7 @@ sub new_with_options {
     }
 
     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';
 
@@ -88,10 +88,9 @@ sub _parse_argv {
     # Get a clean copy of the original @ARGV
     my $argv_copy = [ @ARGV ];
 
-    my @err;
-
+    my @warnings;
     my ( $parsed_options, $usage ) = eval {
-        local $SIG{__WARN__} = sub { push @err, @_ };
+        local $SIG{__WARN__} = sub { push @warnings, @_ };
 
         if ( HAVE_GLD ) {
             return Getopt::Long::Descriptive::describe_options($class->_usage_format(%params), @$opt_spec);
@@ -102,7 +101,8 @@ sub _parse_argv {
         }
     };
 
-    die join "", grep { defined } @err, $@ if @err or $@;
+    $class->_getopt_spec_warnings(@warnings) if @warnings;
+    $class->_getopt_spec_exception(\@warnings, $@) if $@;
 
     # Get a copy of the Getopt::Long-mangled @ARGV
     my $argv_mangled = [ @ARGV ];
@@ -121,6 +121,13 @@ sub _parse_argv {
     );
 }
 
+sub _getopt_spec_warnings { }
+
+sub _getopt_spec_exception {
+    my ($self, $warnings, $exception) = @_;
+    die @$warnings, $exception;
+}
+
 sub _usage_format {
     return "usage: %c %o";
 }
@@ -435,7 +442,7 @@ This method will take a set of default C<%params> and then collect
 params from the command line (possibly overriding those in C<%params>)
 and then return a newly constructed object.
 
-The special parameter C<argv>, if specified should point to an array  
+The special parameter C<argv>, if specified should point to an array
 reference with an array to use instead of C<@ARGV>.
 
 If L<Getopt::Long/GetOptions> fails (due to invalid arguments),