* implement the unpack( $data, inject => {...} ) feature.
[gitmo/MooseX-Storage.git] / lib / MooseX / Storage / Basic.pm
CommitLineData
ec9c1923 1package MooseX::Storage::Basic;
2use Moose::Role;
3
4use MooseX::Storage::Engine;
5
5ca52230 6our $VERSION = '0.18';
69b45b7d 7our $AUTHORITY = 'cpan:STEVAN';
7b428d1f 8
ec9c1923 9sub pack {
a6ebb4c8 10 my ( $self, @args ) = @_;
298cda98 11 my $e = $self->_storage_get_engine( object => $self );
a6ebb4c8 12 $e->collapse_object(@args);
ec9c1923 13}
14
15sub unpack {
298cda98 16 my ($class, $data, %args) = @_;
17 my $e = $class->_storage_get_engine(class => $class);
18
19 $class->_storage_construct_instance(
c21a034f 20 $e->expand_object($data, %args),
298cda98 21 \%args
22 );
23}
24
25sub _storage_get_engine {
26 my $self = shift;
27 MooseX::Storage::Engine->new( @_ );
28}
29
30sub _storage_construct_instance {
31 my ($class, $args, $opts) = @_;
c21a034f 32 my %i = defined $opts->{'inject'} ? %{ $opts->{'inject'} } : ();
298cda98 33
c21a034f 34 $class->new( %$args, %i );
ec9c1923 35}
36
371;
38
39__END__
40
41=pod
42
43=head1 NAME
44
1390c23d 45MooseX::Storage::Basic - The simplest level of serialization
ec9c1923 46
47=head1 SYNOPSIS
48
1390c23d 49 package Point;
50 use Moose;
51 use MooseX::Storage;
52
c1830046 53 our $VERSION = '0.01';
54
1390c23d 55 with Storage;
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 pack/unpack an
65 ## object in perl data structures
66
67 # pack the class into a hash
c1830046 68 $p->pack(); # { __CLASS__ => 'Point-0.01', x => 10, y => 10 }
1390c23d 69
70 # unpack the hash into a class
c1830046 71 my $p2 = Point->unpack({ __CLASS__ => 'Point-0.01', x => 10, y => 10 });
c21a034f 72
73 # unpack the hash, with insertion of paramaters
74 my $p3 = Point->unpack( $p->pack, inject => { x => 11 } );
1390c23d 75
ec9c1923 76=head1 DESCRIPTION
77
1390c23d 78This is the most basic form of serialization. This is used by default
79but the exported C<Storage> function.
80
ec9c1923 81=head1 METHODS
82
83=over 4
84
85=item B<pack>
86
c21a034f 87=item B<unpack ($data [, insert => { key => val, ... } ] )>
88
89Providing the C<insert> argument let's you supply additional arguments to
90the class' C<new> function, or override ones from the serialized data.
ec9c1923 91
92=back
93
94=head2 Introspection
95
96=over 4
97
98=item B<meta>
99
100=back
101
102=head1 BUGS
103
104All complex software has bugs lurking in it, and this module is no
105exception. If you find a bug please either email me, or add the bug
106to cpan-RT.
107
108=head1 AUTHOR
109
110Chris Prather E<lt>chris.prather@iinteractive.comE<gt>
111
112Stevan Little E<lt>stevan.little@iinteractive.comE<gt>
113
114=head1 COPYRIGHT AND LICENSE
115
1f3074ea 116Copyright 2007-2008 by Infinity Interactive, Inc.
ec9c1923 117
118L<http://www.iinteractive.com>
119
120This library is free software; you can redistribute it and/or modify
121it under the same terms as Perl itself.
122
123=cut