sub pack {
my ( $self, @args ) = @_;
- my $e = $self->_storage_get_engine( object => $self );
+ my $e = $self->_storage_get_engine_class->new( object => $self );
$e->collapse_object(@args);
}
sub unpack {
my ($class, $data, %args) = @_;
- my $e = $class->_storage_get_engine(class => $class);
+ my $e = $class->_storage_get_engine_class->new(class => $class);
$class->_storage_construct_instance(
- [ $e->expand_object($data, %args) ],
+ $e->expand_object($data, %args),
\%args
);
}
-sub _storage_get_engine {
- my $self = shift;
- MooseX::Storage::Engine->new( @_ );
+sub _storage_get_engine_class {
+ 'MooseX::Storage::Engine';
}
sub _storage_construct_instance {
my ($class, $args, $opts) = @_;
-
- my @i = defined $opts->{'inject'} ? @{ $opts->{'inject'} } : ();
+ my %i = defined $opts->{'inject'} ? %{ $opts->{'inject'} } : ();
- $class->new( @$args, @i );
+ $class->new( %$args, %i );
}
-
-
-
1;
__END__
# unpack the hash into a class
my $p2 = Point->unpack({ __CLASS__ => 'Point-0.01', x => 10, y => 10 });
+
+ # unpack the hash, with insertion of paramaters
+ my $p3 = Point->unpack( $p->pack, inject => { x => 11 } );
=head1 DESCRIPTION
=over 4
-=item B<pack>
+=item B<pack ([ disable_cycle_check => 1])>
+
+Providing the C<disable_cycle_check> argument disables checks for any cyclical
+references. The current implementation for this check is rather naive, so if
+you know what you are doing, you can bypass this check.
+
+This trait is applied on a perl-case basis. To set this flag for all objects
+that inherit from this role, see L<MooseX::Storage::Traits::DisableCycleDetection>.
+
+=item B<unpack ($data [, insert => { key => val, ... } ] )>
-=item B<unpack ($data)>
+Providing the C<insert> argument let's you supply additional arguments to
+the class' C<new> function, or override ones from the serialized data.
=back