logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

MooseX::LazyRequire - Required attributes which fail only when trying to use them

Authors

       •   Florian Ragwitz <rafl@debian.org>

       •   Dave Rolsky <autarch@urth.org>

Caveats

       Prior to Moose 1.9900, roles didn'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,
           );

       With Moose 1.9900, you can use this module in roles just the same way you can in classes.

Contributors

       •   Karen Etheridge <ether@cpan.org>

       •   David Precious <davidp@preshweb.co.uk>

       •   Jesse Luehrs <doy@tozt.net>

perl v5.34.0                                       2022-06-15                           MooseX::LazyRequire(3pm)

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.

Name

       MooseX::LazyRequire - Required attributes which fail only when trying to use them

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

Version

       version 0.11

See Also