2009/12/22 Shlomi Fish <[email protected]>:
> Hi Dermot!
Hi Shlomi,
>> package Media;
>>
>> use metaclass (
>> metaclass => 'Moose::Meta::Class',
>> error_class => 'Moose::Error::Croak',
>> );
>> use Moose;
>> use AppConfig;
>> use FindBin qw($Bin);
>> use lib "$Bin/../";
>>
>>
>> has 'config' => (
>> is => 'ro',
>> lazy => 1,
>> default => sub{ {} },
>> trigger => \&_get_config,
>> );
...
> This doesn't seem to do what you want. I think you want a meaningful "default"
> or "builder" instead:
>
> <<<<<<<<<
> builder => Str
> The value of this key is the name of the method that will be
> called to obtain the value used to initialize the attribute.
> See the builder option docs in Class::MOP::Attribute
> and/or Moose::Cookbook::Basics::Recipe8 for more information.
>>>>>>>>>>
>
>>
>> sub _get_config {
>> my $self = shift;
>> my $config = AppConfig->new( {
>> CREATE => 0,
>> });
>> $config->define('media_root',{ ARGCOUNT=> 'ARGCOUNT_ONE' });
>> my $config_file = "$Bin/../media.conf";
>> $self->croak("Can't open config file $config_file\n") if (! -e
>> $config_file);
>> $config->file($config_file);
>> return $config;
>> }
>>
> Again, this should most probably be a "builder" method.
Okay, I'll take that advice. So now I have
has 'config' => (
is => 'ro',
lazy_build => 1,
);
sub _build_config {
my $self = shift;
my $config = AppConfig->new( {
CREATE => 1,
GLOBAL => {
ARGCOUNT => 1,
},
});
my $config_file = "$Bin/../spl.conf";
$self->croak("Can't open config file $config_file\n") if (! -e
$config_file);
$config->file($config_file);
return $config;
}
And it works a treat, tests all passed, Dumper gave me what I wanted
and $self->config->media_root gives me a meaningful response.
You get the cigar.
> Wow! This is the first time I was able to reply to a question here. Party at
> my place at 16:00. Bring a lot of Moose-shaped cakes. (If it turned out, I was
> misleading, I won't get to eat any of them - ;-)).
Elkles cake....poor I know.