NAME
Mojo::UserAgent::Mockable::Serializer - A class that serializes Mojo transactions created by Mojo::UserAgent::Mockable.
VERSION
version 1.59
SYNOPSIS
# This module is not intended to be used directly. Synopsis here is given to show how
# Mojo::UserAgent::Mockable uses the module to record transactions.
use Mojo::UserAgent::Mockable::Serializer;
use Mojo::UserAgent;
use File::Slurper qw(read_text write_text);
my $ua = Mojo::UserAgent->new;
my $serializer = Mojo::UserAgent::Mockable::Serializer->new;
my @transactions;
push @transactions, $ua->get('http://example.com');
push @transactions, $ua->get('http://example.com/object/123');
push @transactions, $ua->get('http://example.com/subobject/456');
my $json = $serializer->serialize(@transactions);
write_text('/path/to/file/json', $json);
# OR
$serializer->store('/path/to/file.json', @transactions);
# Later...
my $json = read_text('/path/to/file.json');
my @reconstituted_transactions = $serializer->deserialize($json);
# OR
#
my @reconstituted_transactions = Mojo::UserAgent::Mockable::Serializer->retrieve('/path/to/file.json');
METHODS
serialize
Serialize or freeze one or more instances of Mojo::Transaction. Takes an array of transactions to be serialized as the single argument. This method will generate a warning if the instance has any subscribers (see "on" in Mojo::EventEmitter). Suppress this warning with (e.g.):
no warnings 'Mojo::UserAgent::Mock::Serializer';
$serializer->serialize(@transactions);
use warnings 'Mojo::UserAgent::Mock::Serializer';
deserialize
Deserialize or thaw a previously serialized array of Mojo:Transaction. Arguments:
store
Serialize an instance of Mojo::Transaction and write it to the given file or file handle. Takes two arguments:
- $file
-
File or handle to write serialized object to.
- @transactions
-
Array of Mojo::Transaction to serialize
retrieve
Read from the specified file or file handle and deserialize one or more instances of Mojo::Transaction from the data read. If a file handle is passed, data will be read until an EOF is received. Arguments:
EVENTS
This module emits the following events:
pre_thaw
$serializer->on( pre_thaw => sub {
my ($serializer, $slush) = @_;
...
});
Emitted immediately before transactions are deserialized. See "DATA STRUCTURE" below for details of the format of $slush.
post_thaw
# Note that $transactions is an arrayref here.
$serializer->on( post_thaw => sub {
my ($serializer, $transactions, $slush) = @_;
...
}
Emitted immediately after transactions are deserialized. See "DATA STRUCTURE" below for details of the format of $slush.
In addition, each transaction, as well as each message therein, serialized using this module will emit the following events:
pre_freeze
$transaction->on(freeze => sub {
my $tx = shift;
...
});
Emitted immediately before the transaction is serialized.
post_freeze
Emitted immediately after the transaction is serialized. See "Messages" for details of the frozen format.
$transaction->on(post_freeze => sub {
my $tx = shift;
my $frozen = shift;
...
});
DATA STRUCTURE
serialize produces, and deserialize expects, JSON data. Transactions are stored as an array of JSON objects (i.e. hashes). Each transaction object has the keys:
- 'class'
-
The original class of the transaction.
- 'request'
-
The request portion of the transaction (e.g. "GET /foo/bar ..."). See "Messages" below for encoding details.
- 'response'
-
The response portion of the transaction (e.g. "200 OK ..."). See "Messages" below for encoding details.
Messages
Individual messages are stored as JSON objects (i.e. hashes) with the keys:
- 'class'
-
The class name of the serialized object. This should be a subclass of Mojo::Message
- 'events'
-
Array of events with subscribers in the serialized object. These events will be re-emitted after the "thaw" event is emitted, but any subscribers present in the original object will be lost.
- 'body'
-
The raw HTTP message body.
CAVEATS
This module does not serialize any event listeners. This is unlikely to change in future releases.
AUTHOR
Kit Peters <popefelix@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2022 by Kit Peters.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.