Mojolicious-Plugin-Data-Transfigure
view release on metacpan or search on metacpan
lib/Mojolicious/Plugin/Data/Transfigure.pm view on Meta::CPAN
if (defined($lt) && any {$_ eq $k} @renderers) {
$args->{$k} = $lt->transfigure($args->{$k});
}
}
}
);
}
=head1 NAME
Mojolicious::Plugin::Data::Transfigure - Mojolicious adapter for Data::Transfigure
=head1 SYNOPSIS
# in startup
$app->plugin('Data::Transfigure' => {
renderers => [qw(json openapi)]
});
$app->transfig->output->add_transfigurators(
Data::Transfigure::Type->new(
type => "App::Model::Result::Book",
handler => sub($data) {
+{
id => $data->id,
name => $data->name,
author => $data->author,
}
}
),
Data::Transfigure::Type->new(
type => 'App::Model::Result::Person',
handler => sub($data) {
+{
id => $data->id,
firstname => $data->names->[0],
lastname => $data->names->[1],
}
}
)
);
$app->transfig->input->add_transfigurators(
Data::Transfigure::Position->new(
position => '/**/author',
handler => sub($data) {
+{
id => $data->id,
names => [$data->{firstname}, $data->{lastname}]
}
}
)
);
# in controller
sub get_book($self) {
my $book = $self->model("Book")->find($self->param('id'));
$self->render(json => $book);
}
sub update_book($self) {
my $book = $self->model("Book")->find($self->param('id'));
my $data = $self->transfig->json;
$book->author->update(delete($data->{author}));
$book->update($data);
$book->discard_changes;
$self->render(json => $book);
}
=head1 DESCRIPTION
This plugin is an adapter to make L<Data::Transfigure> a bit more convenient to
use in L<Mojolicious> applications. Two transfigurators are created for you:
one for data input, and the other for output. The default output transfigurator
is automatically invoked when rendering data via any of the methods configured
as L</renderers>. The default input transfigurator is manually invoked by
calling the L<transfig.json> helper rather than, e.g., C<$c-E<gt>req-E<gt>json>.
=head1 METHODS
L<Mojolicious::Plugin::Data::Transfigure> inherits all methods from
L<Mojolicious::Plugin> and implements the following new ones
=head2 register
Register the plugin in a Mojolicious application. Configuration via named
arguments:
=head4 bare
Configures the default input and output transfigurators to be initialized with
no transfigurations instead of their usual default sets.
=head4 prefix
Configures the prefix used for the module's Mojolicious helper functions. This
documentation assumes that it is left unchanged
Default: C<transfig>
=head4 renderers
Controls which output rendering functions (e.g., C<text>, C<json>) are
intercepted and automatically transfigured before being delivered to the client
Default: C<['json']>
=head1 HELPERS
=head2 transfig.input
app->transfig->input
Returns the default input transfigurator. Add transfigurations to it by calling
C<add_transfigurator()>/C<add_transfigurator_at()> on the return value.
By default, the following transfigurators are configured, unless the L</bare>
configuration option is enabled:
=over
( run in 0.828 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )