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);
}
else
{
- plan tests => 25;
+ plan tests => 37;
}
{
);
}
+{
+ 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 );
}
}
+# 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 );
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