48c459722686f4c336f66ca31b8f98041ec23031
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Serialize / Storable.pm
1 package DBIx::Class::Serialize::Storable;
2 use strict;
3 use Storable;
4
5 sub STORABLE_freeze {
6     my ($self,$cloning) = @_;
7     my $to_serialize = { %$self };
8     delete $to_serialize->{result_source};
9     return (Storable::freeze($to_serialize));
10 }
11
12 sub STORABLE_thaw {
13     my ($self,$cloning,$serialized) = @_;
14     %$self = %{ Storable::thaw($serialized) };
15     $self->result_source($self->result_source_instance);
16 }
17
18 1;
19
20 __END__
21
22 =head1 NAME 
23
24     DBIx::Class::Serialize::Storable - hooks for Storable freeze/thaw (EXPERIMENTAL)
25
26 =head1 SYNOPSIS
27
28     # in a table class definition
29     __PACKAGE__->load_components(qw/Serialize::Storable/);
30     
31     # meanwhile, in a nearby piece of code
32     my $obj = $schema->resultset('Foo')->find(12);
33     $cache->set($obj->ID, $obj); # if the cache uses Storable, this will work automatically
34
35 =head1 DESCRIPTION
36
37 This component adds hooks for Storable so that row objects can be serialized. It assumes that
38 your row object class (C<result_class>) is the same as your table class, which is the normal
39 situation. However, this code is not yet well tested, and so should be considered experimental.
40
41 =head1 AUTHORS
42
43 David Kamholz <dkamholz@cpan.org>
44
45 =head1 LICENSE
46
47 You may distribute this code under the same terms as Perl itself.
48
49 =cut