package MooseX::Storage::Deferred;
use Moose::Role;
-our $VERSION = '0.26';
-our $AUTHORITY = 'cpan:STEVAN';
-
with 'MooseX::Storage::Basic';
+sub __get_method {
+ my ( $self, $basename, $value, $method_name ) = @_;
+
+ my $role = MooseX::Storage->_expand_role($basename => $value)->meta;
+ my $method = $role->get_method($method_name)->body;
+}
+
sub thaw {
my ( $class, $packed, $type, @args ) = @_;
(exists $type->{format})
|| confess "You must specify a format type to thaw from";
- my $class_to_load = 'MooseX::Storage::Format::' . $type->{format};
- Class::MOP::load_class($class_to_load);
+ my $code = $class->__get_method(Format => $type->{format} => 'thaw');
- my $method_to_call = $class_to_load . '::thaw';
-
- $class->$method_to_call($packed, @args);
+ $class->$code($packed, @args);
}
sub freeze {
(exists $type->{format})
|| confess "You must specify a format type to freeze into";
- my $class_to_load = 'MooseX::Storage::Format::' . $type->{format};
- Class::MOP::load_class($class_to_load);
-
- my $method_to_call = $class_to_load . '::freeze';
+ my $code = $self->__get_method(Format => $type->{format} => 'freeze');
- $self->$method_to_call(@args);
+ $self->$code(@args);
}
sub load {
(exists $type->{io})
|| confess "You must specify an I/O type to load with";
- my $class_to_load = 'MooseX::Storage::IO::' . $type->{io};
- Class::MOP::load_class($class_to_load);
-
- my $method_to_call = $class_to_load . '::load';
+ my $code = $class->__get_method(IO => $type->{io} => 'load');
- $class->$method_to_call($filename, $type, @args);
+ $class->$code($filename, $type, @args);
}
sub store {
(exists $type->{io})
|| confess "You must specify an I/O type to store with";
- my $class_to_load = 'MooseX::Storage::IO::' . $type->{io};
- Class::MOP::load_class($class_to_load);
+ my $code = $self->__get_method(IO => $type->{io} => 'store');
- my $method_to_call = $class_to_load . '::store';
-
- $self->$method_to_call($filename, $type, @args);
+ $self->$code($filename, $type, @args);
}
no Moose::Role;
=head1 NAME
+=for stopwords undecisive
+
MooseX::Storage::Deferred - A role for undecisive programmers
=head1 SYNOPSIS
use Moose;
use MooseX::Storage;
- our $VERSION = '0.01';
-
with 'MooseX::Storage::Deferred';
has 'x' => (is => 'rw', isa => 'Int');
# pack the class into a JSON string
$p->freeze({ format => 'JSON' }); # { "__CLASS__" : "Point", "x" : 10, "y" : 10 }
+ # pack the class into a JSON string using parameterized JSONpm role
+ $p->freeze({ format => [ JSONpm => { json_opts => { pretty => 1 } } ] });
+
# unpack the JSON string into a class
my $p2 = Point->thaw(
'{ "__CLASS__" : "Point", "x" : 10, "y" : 10 }',
=item I<JSON>
+=for stopwords JSONpm
+
+=item I<JSONpm>
+
=item I<YAML>
=item I<Storable>