c6101b952f7e0c32f406db5130d40cd2e5462ea8
[gitmo/MooseX-Storage.git] / lib / MooseX / Storage.pm
1
2 package MooseX::Storage;
3
4 sub import {
5     my $pkg = caller();
6     $pkg->meta->alias_method('Storage' => sub {
7         my %params = @_;
8         
9         my @roles = (
10             'MooseX::Storage::Basic'
11         );
12         
13         push @roles => 'MooseX::Storage::Format::' . $params{'format'};
14         Class::MOP::load_class($roles[-1]) 
15             || die "Could not load format role (" . $roles[-1] . ") for package ($pkg)";
16            
17         if (exists $params{'io'}) {
18             push @roles => 'MooseX::Storage::IO::' . $params{'io'};
19             Class::MOP::load_class($roles[-1]) 
20                 || die "Could not load IO role (" . $roles[-1] . ") for package ($pkg)";            
21         }
22         
23         return @roles;
24     });
25 }
26
27 package MooseX::Storage::Basic;
28 use Moose::Role;
29
30 use MooseX::Storage::Engine;
31
32 sub pack {
33     my $self = shift;
34     my $e = MooseX::Storage::Engine->new( object => $self );
35     $e->collapse_object;
36 }
37
38 sub unpack {
39     my ( $class, $data ) = @_;
40     my $e = MooseX::Storage::Engine->new( class => $class );
41     $class->new( $e->expand_object($data) );
42 }
43
44 1;
45
46 __END__
47
48 =pod
49
50 =cut