X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FStorage%2FTraits%2FOnlyWhenBuilt.pm;fp=lib%2FMooseX%2FStorage%2FTraits%2FOnlyWhenBuilt.pm;h=a3b9752ef0e2953b77a2daf92ee687a8ffa557fb;hb=76218b465af423661a8b711a20e3e458f9adbb08;hp=0000000000000000000000000000000000000000;hpb=14ef44949f62c764658d56b954bd507d88780213;p=gitmo%2FMooseX-Storage.git diff --git a/lib/MooseX/Storage/Traits/OnlyWhenBuilt.pm b/lib/MooseX/Storage/Traits/OnlyWhenBuilt.pm new file mode 100644 index 0000000..a3b9752 --- /dev/null +++ b/lib/MooseX/Storage/Traits/OnlyWhenBuilt.pm @@ -0,0 +1,82 @@ +package MooseX::Storage::Traits::OnlyWhenBuilt; +use Moose::Role; + +our $VERSION = '0.18'; +our $AUTHORITY = 'cpan:STEVAN'; + +1; + +__END__ + +=pod + +=head1 NAME + +MooseX::Storage::Traits::OnlyWhenBuilt - A custom 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. + +See the SYNOPSIS for a nice example that can be easily cargo-culted. + +=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