convert to Dist::Zilla
[gitmo/MooseX-Storage.git] / lib / MooseX / Storage / Format / Storable.pm
1 package MooseX::Storage::Format::Storable;
2 use Moose::Role;
3
4 use Storable ();
5
6 requires 'pack';
7 requires 'unpack';
8
9 sub thaw {
10     my ( $class, $stored, @args ) = @_;
11     $class->unpack( Storable::thaw($stored), @args );
12 }
13
14 sub freeze {
15     my ( $self, @args ) = @_;
16     Storable::nfreeze( $self->pack(@args) );
17 }
18
19 no Moose::Role;
20
21 1;
22
23 __END__
24
25 =pod
26
27 =head1 NAME
28
29 MooseX::Storage::Format::Storable - A Storable serialization role
30
31 =head1 SYNOPSIS
32
33   package Point;
34   use Moose;
35   use MooseX::Storage;
36
37   with Storage('format' => 'Storable');
38
39   has 'x' => (is => 'rw', isa => 'Int');
40   has 'y' => (is => 'rw', isa => 'Int');
41
42   1;
43
44   my $p = Point->new(x => 10, y => 10);
45
46   ## methods to freeze/thaw into
47   ## a specified serialization format
48
49   # pack the class with Storable
50   my $storable_data = $p->freeze();
51
52   # unpack the storable data into the class
53   my $p2 = Point->thaw($storable_data);
54
55 =head1 DESCRIPTION
56
57 This module will C<thaw> and C<freeze> Moose classes using Storable. It
58 uses C<Storable::nfreeze> by default so that it can be easily used
59 in IPC scenarios across machines or just locally.
60
61 One important thing to note is that this module does not mix well
62 with the IO modules. The structures that C<freeze> and C<thaw> deal with
63 are Storable's memory representation, and (as far as I know) that
64 is not easily just written onto a file. If you want file based
65 serialization with Storable, the please look at the
66 L<MooseX::Storage::IO::StorableFile> role instead.
67
68 =head1 METHODS
69
70 =over 4
71
72 =item B<freeze>
73
74 =item B<thaw ($stored)>
75
76 =back
77
78 =head2 Introspection
79
80 =over 4
81
82 =item B<meta>
83
84 =back
85
86 =head1 BUGS
87
88 All complex software has bugs lurking in it, and this module is no
89 exception. If you find a bug please either email me, or add the bug
90 to cpan-RT.
91
92 =head1 AUTHOR
93
94 Stevan Little E<lt>stevan.little@iinteractive.comE<gt>
95
96 =head1 COPYRIGHT AND LICENSE
97
98 Copyright 2007-2008 by Infinity Interactive, Inc.
99
100 L<http://www.iinteractive.com>
101
102 This library is free software; you can redistribute it and/or modify
103 it under the same terms as Perl itself.
104
105 =cut
106
107