1package DBIx::Class::Serialize::Storable; 2use strict; 3use warnings; 4use Storable; 5 6sub STORABLE_freeze { 7 my ($self, $cloning) = @_; 8 my $to_serialize = { %$self }; 9 10 # The source is either derived from _source_handle or is 11 # reattached in the thaw handler below 12 delete $to_serialize->{result_source}; 13 14 # Dynamic values, easy to recalculate 15 delete $to_serialize->{$_} for qw/related_resultsets _inflated_column/; 16 17 return (Storable::freeze($to_serialize)); 18} 19 20sub STORABLE_thaw { 21 my ($self, $cloning, $serialized) = @_; 22 23 %$self = %{ Storable::thaw($serialized) }; 24 25 # if the handle went missing somehow, reattach 26 $self->result_source($self->result_source_instance) 27 if !$self->_source_handle && $self->can('result_source_instance'); 28} 29 301; 31 32__END__ 33 34=head1 NAME 35 36 DBIx::Class::Serialize::Storable - hooks for Storable freeze/thaw 37 38=head1 SYNOPSIS 39 40 # in a table class definition 41 __PACKAGE__->load_components(qw/Serialize::Storable/); 42 43 # meanwhile, in a nearby piece of code 44 my $cd = $schema->resultset('CD')->find(12); 45 # if the cache uses Storable, this will work automatically 46 $cache->set($cd->ID, $cd); 47 48=head1 DESCRIPTION 49 50This component adds hooks for Storable so that row objects can be 51serialized. It assumes that your row object class (C<result_class>) is 52the same as your table class, which is the normal situation. 53 54=head1 HOOKS 55 56The following hooks are defined for L<Storable> - see the 57documentation for L<Storable/Hooks> for detailed information on these 58hooks. 59 60=head2 STORABLE_freeze 61 62The serializing hook, called on the object during serialization. It 63can be inherited, or defined in the class itself, like any other 64method. 65 66=head2 STORABLE_thaw 67 68The deserializing hook called on the object during deserialization. 69 70=head1 AUTHORS 71 72David Kamholz <dkamholz@cpan.org> 73 74=head1 LICENSE 75 76You may distribute this code under the same terms as Perl itself. 77 78=cut 79