NAME
MooseX::LazyRequire - Required attributes which fail only when trying to use them
VERSION
version 0.02
SYNOPSIS
package Foo;
use Moose;
use MooseX::LazyRequire;
has foo => (
is => 'ro',
lazy_required => 1,
);
has bar => (
is => 'ro',
builder => '_build_bar',
);
sub _build_bar { shift->foo }
Foo->new(foo => 42); # succeeds, foo and bar will be 42
Foo->new(bar => 42); # succeeds, bar will be 42
Foo->new; # fails, neither foo nor bare were given
DESCRIPTION
This module adds a lazy_required
option to Moose attribute declarations.
The reader methods for all attributes with that option will throw an exception unless a value for the attributes was provided earlier by a constructor parameter or through a writer method.
CAVEATS
Apparently Moose roles don't have an attribute metaclass, so this module can't easily apply its magic to attributes defined in roles. If you want to use lazy_required
in role attributes, you'll have to apply the attribute trait yourself:
has foo => (
traits => ['LazyRequire'],
is => 'ro',
lazy_required => 1,
);
1;
AUTHOR
Florian Ragwitz <rafl@debian.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2009 by Florian Ragwitz.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.