Revision history for Perl extension MooseX::ConfigFromFile
+{{$NEXT}}
+ - Call the configfile attribute default sub if it is a sub, not just a
+ string, just like MooseX::Getopt does (RT#73325, Karen Etheridge)
+
0.03 - Dec 18, 2010
- The test suite now uses Test::Fatal instead of Test::Exception (Karen
Etheridge).
my $cfmeta = $class->meta->find_attribute_by_name('configfile');
$configfile = try { to_File($class->configfile) };
$configfile ||= $cfmeta->default if $cfmeta->has_default;
+ if (ref $configfile eq 'CODE') {
+ $configfile = &$configfile($class);
+ }
}
if (defined $configfile) {
use strict;
use Test::More;
use Test::Fatal;
+
+
+my %config_from_file_args;
{
package A;
use Moose;
with qw(MooseX::ConfigFromFile);
- sub configfile { 'moo' }
+ sub configfile { die 'should not ever be here' }
- sub get_config_from_file { {} }
+ sub get_config_from_file {
+ my ($class, $file) = @_;
+ $config_from_file_args{$class} = $file;
+ return {};
+ }
}
{
sub configfile { die; }
has configfile => ( is => 'bare', default => 'bar' );
+}
+{
+ package C;
+ use Moose;
+ extends qw(A);
+
+ sub configfile { die; }
+ has configfile => (
+ is => 'bare',
+ default => sub {
+ my $class = shift;
+ $class = blessed($class) || $class;
+ '/dir/' . $class;
+ },
+ );
}
is(exception { A->new_with_config() }, undef, 'A->new_with_config lives');
+is($config_from_file_args{A}, undef, 'there is no configfile for A');
+
is(exception { B->new_with_config() }, undef, 'B->new_with_config lives');
+is($config_from_file_args{B}, 'bar', 'B configfile attr default sub is called');
+
+is(exception { C->new_with_config() }, undef, 'C->new_with_config lives');
+is($config_from_file_args{C}, '/dir/C', 'C configfile attr default sub is called, with classname');
+
done_testing();