X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FStorage%2FEngine%2FTrait%2FOnlyWhenBuilt.pm;fp=lib%2FMooseX%2FStorage%2FEngine%2FTrait%2FOnlyWhenBuilt.pm;h=427dfb4795ecb84dea457d82aa9659cb0a218f2a;hb=511f9c4baa29713783b2cebdb69a441ffe2190a3;hp=461c980f0d0f61720af4784e2c05707e176019c2;hpb=ec72518379c644ab85126ee0391773ee7028665c;p=gitmo%2FMooseX-Storage.git diff --git a/lib/MooseX/Storage/Engine/Trait/OnlyWhenBuilt.pm b/lib/MooseX/Storage/Engine/Trait/OnlyWhenBuilt.pm index 461c980..427dfb4 100644 --- a/lib/MooseX/Storage/Engine/Trait/OnlyWhenBuilt.pm +++ b/lib/MooseX/Storage/Engine/Trait/OnlyWhenBuilt.pm @@ -3,7 +3,7 @@ use Moose::Role; # we should # only serialize the attribute if it's already built. So, go ahead -# and check if the attribute has a predicate. If so, check if it's +# and check if the attribute has a predicate. If so, check if it's # set and then go ahead and look it up. around 'collapse_attribute' => sub { my ($orig, $self, $attr, @args) = @_; @@ -18,3 +18,76 @@ around 'collapse_attribute' => sub { 1; +__END__ + +=pod + +=head1 NAME + +MooseX::Storage::Engine::Trait::OnlyWhenBuilt - An engine trait to bypass serialization + +=head1 SYNOPSIS + + { package Point; + use Moose; + use MooseX::Storage; + + with Storage( traits => [qw|OnlyWhenBuilt|] ); + + has 'x' => (is => 'rw', lazy_build => 1 ); + has 'y' => (is => 'rw', lazy_build => 1 ); + has 'z' => (is => 'rw', builder => '_build_z' ); + + sub _build_x { 3 } + sub _build_y { expensive_computation() } + sub _build_z { 3 } + } + + my $p = Point->new( 'x' => 4 ); + + # the result of ->pack will contain: + # { x => 4, z => 3 } + $p->pack; + +=head1 DESCRIPTION + +Sometimes you don't want a particular attribute to be part of the +serialization if it has not been built yet. If you invoke C +as outlined in the C, only attributes that have been built +(ie, where the predicate returns 'true') will be serialized. +This avoids any potentially expensive computations. + +This trait is applied to an instance of L, for the +user-visible version shown in the SYNOPSIS, see L + +=head1 METHODS + +=head2 Introspection + +=over 4 + +=item B + +=back + +=head1 BUGS + +All complex software has bugs lurking in it, and this module is no +exception. If you find a bug please either email me, or add the bug +to cpan-RT. + +=head1 AUTHOR + +Stevan Little Estevan.little@iinteractive.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright 2007-2008 by Infinity Interactive, Inc. + +L + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut +