refactor Storage output into an IO engine to allow better flexability
[gitmo/MooseX-Storage.git] / lib / MooseX / Storage / JSON.pm
CommitLineData
e59193fb 1
2package MooseX::Storage::JSON;
3use Moose::Role;
4
5with 'MooseX::Storage::Base';
6
e9739624 7use JSON::Syck ();
e59193fb 8use MooseX::Storage::Engine;
bff7e5f7 9use MooseX::Storage::IO::File;
e59193fb 10
e9739624 11sub pack {
12 my $self = shift;
bff7e5f7 13 my $e = MooseX::Storage::Engine->new( object => $self );
14 $e->collapse_object;
e9739624 15}
16
17sub unpack {
bff7e5f7 18 my ( $class, $data ) = @_;
19 my $e = MooseX::Storage::Engine->new( class => $class );
20 $class->new( $e->expand_object($data) );
e9739624 21}
22
23sub load {
bff7e5f7 24 my ( $class, $filename ) = @_;
25 $class->unpack(
26 $class->thaw( MooseX::Storage::IO->new( file => $filename )->load() )
27 );
e9739624 28}
29
30sub store {
bff7e5f7 31 my ( $self, $filename ) = @_;
32 MooseX::Storage::IO->new( file => $filename )->store( $self->freeze() );
e9739624 33}
34
35sub thaw {
bff7e5f7 36 my ( $class, $json ) = @_;
37 $class->unpack( JSON::Syck::Load($json) );
e9739624 38}
e59193fb 39
40sub freeze {
41 my $self = shift;
bff7e5f7 42 JSON::Syck::Dump( $self->pack() );
e59193fb 43}
44
e59193fb 451;
e9739624 46
47__END__
48
49=pod
50
51=cut
52