package Object::Recorder::Storage; use warnings; use strict; =head1 NAME Object::Recorder::Storage - Serializable data structure for Object::Recorder =cut our $VERSION = '0.01'; =head1 SYNOPSIS This module makes it possible to record method calls issued to a set of objects inti a serializable container which can later be replayed, perfoming the actual method calls. =head1 CLASS METHODS =cut =head2 new ($object_class, $constructor, @args) Builds a new storage object. =cut sub new { my $class = shift; my ($object_class, $constructor, @args) = @_; bless { calls => [], object_class => $object_class, constructor => $constructor, args => \@args }, $class; } =head2 AUTOLOAD Arbitrary method calls are stored using AUTOLOAD. It will return another L instance so that method calls on return values from another recorded method calls will also be properly recorded. =cut our $AUTOLOAD; sub AUTOLOAD { my ($self, @args) = @_; my ($method) = ($AUTOLOAD =~ /::([^:]+?)$/); return if $method eq 'DESTROY'; # only handle methods which return just one value my $return = (ref $self)->new; push @{$self->{calls}}, { method => $method, args => [ @args ], retval => $return }; return $return; } =head1 AUTHOR Nilson Santos Figueiredo Junior, C<< >> =head1 COPYRIGHT & LICENSE Copyright (C) 2007 Nilson Santos Figueiredo Junior. Copyright (C) 2007 Picturetrail, Inc. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut 1;