support the configfile sub being totally overridden
Karen Etheridge [Thu, 7 Feb 2013 23:24:14 +0000 (15:24 -0800)]
Changes
lib/MooseX/Getopt/Basic.pm
t/008_configfromfile.t

diff --git a/Changes b/Changes
index 51e8a39..29a24f2 100644 (file)
--- a/Changes
+++ b/Changes
@@ -3,6 +3,7 @@ Revision history for Perl extension MooseX-Getopt
 {{$NEXT}}
  - fix broken tests on win32 with file comparisons
  - allow configfiles called "0"
+ - support more mechanisms for overriding default configfile
 
 0.53      2013-02-05 09:59:00 PST-0800
  - properly indicate optional dependency in tests using
index 9c7e8f7..71de569 100644 (file)
@@ -40,7 +40,12 @@ sub process_argv {
         }
 
         if(!defined $configfile) {
-            $configfile = $cfmeta->default if $cfmeta->has_default;
+            # this is a classic legacy usecase documented in
+            # MooseX::ConfigFromFile that we should continue to support
+            $configfile = try { $class->configfile };
+
+            $configfile = $cfmeta->default
+                if not defined $configfile and $cfmeta->has_default;
             if (ref $configfile eq 'CODE') {
                 # not sure theres a lot you can do with the class and may break some assumptions
                 # warn?
index 3e8dc4c..cb54a1c 100644 (file)
@@ -2,7 +2,7 @@ use strict;
 use warnings;
 
 use Test::Requires { 'MooseX::ConfigFromFile' => '0.06' };    # skip all if not installed
-use Test::More tests => 38;
+use Test::More tests => 50;
 use Test::Fatal;
 use Path::Tiny;
 use Test::NoWarnings 1.04 ':early';
@@ -77,6 +77,16 @@ use Test::NoWarnings 1.04 ':early';
     );
 }
 
+{
+    package App::ConfigFileWrapped;
+
+    use Moose;
+    extends 'App';
+
+    around configfile => sub { '/notused/default' };
+}
+
+
 # No config specified
 {
     local @ARGV = qw( --required_from_argv 1 );
@@ -109,6 +119,18 @@ use Test::NoWarnings 1.04 ':early';
         is( $app->configfile, path('/notused/default'),
             '... configfile is /notused/default as expected' );
     }
+
+    {
+        my $app = App::ConfigFileWrapped->new_with_options;
+        isa_ok( $app, 'App::ConfigFileWrapped' );
+        app_ok( $app );
+
+        ok(  !$app->config_from_override,
+            '... config_from_override false as expected' );
+
+        is( $app->configfile, path('/notused/default'),
+            '... configfile is /notused/default as expected' );
+    }
 }
 
 # Config specified
@@ -140,7 +162,22 @@ use Test::NoWarnings 1.04 ':early';
         ok( $app->config_from_override,
              '... config_from_override true as expected' );
 
-        is( $app->configfile, path('/notused'),
+        is( $app->configfile, path('/notused/override'),
+            '... configfile is /notused/override as expected' );
+    }
+    TODO: {
+        my $app = App::ConfigFileWrapped->new_with_options;
+        isa_ok( $app, 'App::ConfigFileWrapped' );
+        app_ok( $app );
+
+        ok( $app->config_from_override,
+             '... config_from_override true as expected' );
+
+# FIXME - in order for this to work, we need to fix CFF so the
+# configfile method always returns the actual value of the attribute,
+# not the default sub thingy.
+        local $TODO = 'MooseX::ConfigFromFile needs fixes';
+        is( $app->configfile, path('/notused/override'),
             '... configfile is /notused as expected' );
     }
 }