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 )