adding support for Deferred
[gitmo/MooseX-Storage.git] / lib / MooseX / Storage / Deferred.pm
CommitLineData
1f3074ea 1package MooseX::Storage::Deferred;
2use Moose::Role;
3
4our $VERSION = '0.03';
5our $AUTHORITY = 'cpan:STEVAN';
6
7with 'MooseX::Storage::Basic';
8
9sub thaw {
10 my ( $class, $packed, $type, @args ) = @_;
11
12 (exists $type->{format})
13 || confess "You must specify a format type to thaw from";
14
15 my $class_to_load = 'MooseX::Storage::Format::' . $type->{format};
16 Class::MOP::load_class($class_to_load);
17
18 my $method_to_call = $class_to_load . '::thaw';
19
20 $class->$method_to_call($packed, @args);
21}
22
23sub freeze {
24 my ( $self, $type, @args ) = @_;
25
26 (exists $type->{format})
27 || confess "You must specify a format type to freeze into";
28
29 my $class_to_load = 'MooseX::Storage::Format::' . $type->{format};
30 Class::MOP::load_class($class_to_load);
31
32 my $method_to_call = $class_to_load . '::freeze';
33
34 $self->$method_to_call(@args);
35}
36
371;
38
39__END__
40
41=pod
42
43=head1 NAME
44
45MooseX::Storage::Deferred - A role for undecisive programmers
46
47=head1 SYNOPSIS
48
49 package Point;
50 use Moose;
51 use MooseX::Storage;
52
53 our $VERSION = '0.01';
54
55 with 'MooseX::Storage::Deferred';
56
57 has 'x' => (is => 'rw', isa => 'Int');
58 has 'y' => (is => 'rw', isa => 'Int');
59
60 1;
61
62 my $p = Point->new(x => 10, y => 10);
63
64 ## methods to freeze/thaw into
65 ## a specified serialization format
66 ## (in this case JSON)
67
68 # pack the class into a JSON string
69 $p->freeze({ format => 'JSON' }); # { "__CLASS__" : "Point", "x" : 10, "y" : 10 }
70
71 # unpack the JSON string into a class
72 my $p2 = Point->thaw(
73 '{ "__CLASS__" : "Point", "x" : 10, "y" : 10 }',
74 { format => 'JSON' }
75 );
76
77=head1 DESCRIPTION
78
79This role is designed for those times when you need to
80serialize into many different formats or I/O options.
81It basically allows you to choose the format and IO
82options only when you actually use them (see the
83SYNOPSIS for more info)
84
85=head1 METHODS
86
87=over 4
88
89=item B<freeze ($type_desc)>
90
91=item B<thaw ($data, $type_desc)>
92
93=back
94
95=head2 Introspection
96
97=over 4
98
99=item B<meta>
100
101=back
102
103=head1 BUGS
104
105All complex software has bugs lurking in it, and this module is no
106exception. If you find a bug please either email me, or add the bug
107to cpan-RT.
108
109=head1 AUTHOR
110
111Stevan Little E<lt>stevan.little@iinteractive.comE<gt>
112
113=head1 COPYRIGHT AND LICENSE
114
115Copyright 2007-2008 by Infinity Interactive, Inc.
116
117L<http://www.iinteractive.com>
118
119This library is free software; you can redistribute it and/or modify
120it under the same terms as Perl itself.
121
122=cut