MooseX::Storage::Traits::WithRoles - A custom trait to include roles in serialization
version 0.2.0
package ThirdDimension; use Moose::Role; has 'z' => (is => 'rw', isa => 'Int'); package Point; use Moose; use MooseX::Storage; with Storage( base => 'SerializedClass', traits => [ 'WithRoles' ] ); has 'x' => (is => 'rw', isa => 'Int'); has 'y' => (is => 'rw', isa => 'Int'); 1; use Moose::Util qw/ with_traits /; my $p = with_traits( 'Point', 'ThirdDimension' )->new(x => 10, y => 10, z => 10); my $packed = $p->pack(); # { __CLASS__ => 'Point', '__ROLES__' => [ 'ThirdDimension' ], x => 10, y => 10, z => 10 } # unpack the hash into a class my $p2 = Point->unpack($packed); print $p2->z;
This trait is meant to be used when a base class will be consuming roles at runtime via (for example) with_traits. Without this trait, the '__CLASS__' attribute of the serialized object would be the name of the resulting anonymous class, which is useless to reconstruct the class after the fact.
with_traits
When this trait is used, the serialized __CLASS__ value will be the base class, and __ROLES__ will contain the list of roles that it consumes. If used in conjecture with MooseX::Storage::Base::SerializedClass, unpack() will reinflate the data in the right class augmented by the given roles.
__CLASS__
__ROLES__
unpack()
Oh yeah, and the trait also works with MooseX::Role::Parameterized roles. You're welcome, Sartak. ;-)
Yanick Champoux <yanick@babyl.dyndns.org>
This software is copyright (c) 2015 by Yanick Champoux.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
To install MooseX::Storage::Traits::WithRoles, copy and paste the appropriate command in to your terminal.
cpanm
cpanm MooseX::Storage::Traits::WithRoles
CPAN shell
perl -MCPAN -e shell install MooseX::Storage::Traits::WithRoles
For more information on module installation, please visit the detailed CPAN module installation guide.