package MooseX::Storage::Traits::OnlyWhenBuilt;
use Moose::Role;
-our $VERSION = '0.18';
+our $VERSION = '0.30';
our $AUTHORITY = 'cpan:STEVAN';
requires 'pack';
$self->$orig($data, %args);
};
+no Moose::Role;
+
1;
__END__
{ 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
+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<Storage()>
as outlined in the C<Synopsis>, only attributes that have been built
(ie, where the predicate returns 'true') will be serialized.
=head1 BUGS
-All complex software has bugs lurking in it, and this module is no
+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.