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