From: Karen Etheridge Date: Thu, 7 Feb 2013 23:24:14 +0000 (-0800) Subject: support the configfile sub being totally overridden X-Git-Tag: v0.54~6 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=gitmo%2FMooseX-Getopt.git;a=commitdiff_plain;h=cd4283e8e3f9124e475e839847bcb9a1b185411e support the configfile sub being totally overridden --- diff --git a/Changes b/Changes index 51e8a39..29a24f2 100644 --- 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 diff --git a/lib/MooseX/Getopt/Basic.pm b/lib/MooseX/Getopt/Basic.pm index 9c7e8f7..71de569 100644 --- a/lib/MooseX/Getopt/Basic.pm +++ b/lib/MooseX/Getopt/Basic.pm @@ -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? diff --git a/t/008_configfromfile.t b/t/008_configfromfile.t index 3e8dc4c..cb54a1c 100644 --- a/t/008_configfromfile.t +++ b/t/008_configfromfile.t @@ -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' ); } }