From: Gordon Irving Date: Thu, 27 Aug 2009 15:09:04 +0000 (+0100) Subject: if configfile is a coderef call it and write some tests for it X-Git-Tag: 0.23~1^2 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=aa03fdad265261c3f67fdab12140ef2a3863a539;p=gitmo%2FMooseX-Getopt.git if configfile is a coderef call it and write some tests for it --- diff --git a/lib/MooseX/Getopt.pm b/lib/MooseX/Getopt.pm index 4550082..d0dbb3f 100644 --- a/lib/MooseX/Getopt.pm +++ b/lib/MooseX/Getopt.pm @@ -31,6 +31,11 @@ sub new_with_options { if(!defined $configfile) { my $cfmeta = $class->meta->find_attribute_by_name('configfile'); $configfile = $cfmeta->default if $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? + $configfile = &$configfile($class); + } if (defined $configfile) { $config_from_file = eval { $class->get_config_from_file($configfile); diff --git a/t/008_configfromfile.t b/t/008_configfromfile.t index 292e6f5..62e6ed9 100644 --- a/t/008_configfromfile.t +++ b/t/008_configfromfile.t @@ -13,7 +13,7 @@ if ( !eval { require MooseX::ConfigFromFile } ) } else { - plan tests => 25; + plan tests => 37; } { @@ -76,6 +76,17 @@ else ); } +{ + package App::DefaultConfigFileCodeRef; + + use Moose; + extends 'App'; + + has '+configfile' => ( + default => sub { return File::Spec->canonpath('/notused/default') }, + ); +} + # No config specified { local @ARGV = qw( --required_from_argv 1 ); @@ -95,6 +106,23 @@ else } } +# No config specified +{ + local @ARGV = qw( --required_from_argv 1 ); + + { + my $app = App::DefaultConfigFileCodeRef->new_with_options; + isa_ok( $app, 'App::DefaultConfigFileCodeRef' ); + app_ok( $app ); + + ok( !$app->config_from_override, + '... config_from_override false as expected' ); + + is( $app->configfile, File::Spec->canonpath('/notused/default'), + '... configfile is /notused/default as expected' ); + } +} + # Config specified { local @ARGV = qw( --configfile /notused --required_from_argv 1 ); @@ -116,6 +144,17 @@ else is( $app->configfile, File::Spec->canonpath('/notused'), '... configfile is /notused as expected' ); } + { + my $app = App::DefaultConfigFileCodeRef->new_with_options; + isa_ok( $app, 'App::DefaultConfigFileCodeRef' ); + app_ok( $app ); + + ok( $app->config_from_override, + '... config_from_override true as expected' ); + + is( $app->configfile, File::Spec->canonpath('/notused'), + '... configfile is /notused as expected' ); + } } # Required arg not supplied from cmdline