Commit | Line | Data |
---|---|---|
e59193fb | 1 | |
2 | package MooseX::Storage::JSON; | |
3 | use Moose::Role; | |
4 | ||
5 | with 'MooseX::Storage::Base'; | |
6 | ||
e9739624 | 7 | use JSON::Syck (); |
e59193fb | 8 | use MooseX::Storage::Engine; |
bff7e5f7 | 9 | use MooseX::Storage::IO::File; |
e59193fb | 10 | |
e9739624 | 11 | sub pack { |
12 | my $self = shift; | |
bff7e5f7 | 13 | my $e = MooseX::Storage::Engine->new( object => $self ); |
14 | $e->collapse_object; | |
e9739624 | 15 | } |
16 | ||
17 | sub 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 | ||
23 | sub load { | |
bff7e5f7 | 24 | my ( $class, $filename ) = @_; |
25 | $class->unpack( | |
26 | $class->thaw( MooseX::Storage::IO->new( file => $filename )->load() ) | |
27 | ); | |
e9739624 | 28 | } |
29 | ||
30 | sub store { | |
bff7e5f7 | 31 | my ( $self, $filename ) = @_; |
32 | MooseX::Storage::IO->new( file => $filename )->store( $self->freeze() ); | |
e9739624 | 33 | } |
34 | ||
35 | sub thaw { | |
bff7e5f7 | 36 | my ( $class, $json ) = @_; |
37 | $class->unpack( JSON::Syck::Load($json) ); | |
e9739624 | 38 | } |
e59193fb | 39 | |
40 | sub freeze { | |
41 | my $self = shift; | |
bff7e5f7 | 42 | JSON::Syck::Dump( $self->pack() ); |
e59193fb | 43 | } |
44 | ||
e59193fb | 45 | 1; |
e9739624 | 46 | |
47 | __END__ | |
48 | ||
49 | =pod | |
50 | ||
51 | =cut | |
52 |