The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Catalyst::Helper::Controller::DBIC::API::REST

SYNOPSIS

    $ catalyst.pl MyApp
    $ cd MyApp
    $ script/myapp_create.pl controller API::REST DBIC::API::REST \
        MyApp::Schema MyApp::Model::DB


    ...

    package MyApp::Controller::API::REST::Producer;

    use strict;
    use warnings;
    use base qw/MyApp::ControllerBase::REST/;
    use JSON::XS;

    __PACKAGE__->config(
        action             =>  { setup => {
                                    PathPart => 'producer',
                                    Chained => '/api/rest/rest_base' }
                                }, # define parent chain action and partpath
        class              =>  'DB::Producer',        # DBIC result class
        create_requires    =>  [qw/name/],            # columns required
                                                      # to create
        create_allows      =>  [qw//],                # additional non-required
                                                      # columns that
                                                      # create allows
        update_allows      =>  [qw/name/],            # columns that
                                                      # update allows
        list_returns       =>  [qw/producerid name/], # columns that
                                                      # list returns

        list_prefetch_allows => [ # every possible prefetch param allowed
            [qw/cd_to_producer/], { 'cd_to_producer' => [qw//] },
            [qw/tags/],           { 'tags'           => [qw//] },
            [qw/tracks/],         { 'tracks'         => [qw//] },
        ],

        list_ordered_by         => [ qw/producerid/ ],
                                    # order of generated list
        list_search_exposes     => [ qw/producerid name/ ],
                                    # columns that can be searched on via list
    );

DESCRIPTION

  This creates REST controllers according to the specifications at
  L<Catalyst::Controller::DBIC::API> and L<Catalyst::Controller::DBIC::API::REST>
  for all the classes in your Catalyst app.

  It creates the following files:

    MyApp/lib/MyApp/Controller/API.pm
    MyApp/lib/MyApp/Controller/API/REST.pm
    MyApp/lib/MyApp/Controller/API/REST/*
    MyApp/lib/MyApp/ControllerBase/REST.pm

  Individual class controllers are under MyApp/lib/MyApp/Controller/API/REST/*.

CONFIGURATION

    The idea is to make configuration as painless and as automatic as possible, so most
    of the work has been done for you.

    There are 8 __PACKAGE__->config(...) options for L<Catalyst::Controller::DBIC::API/CONFIGURATION>.
    Here are the defaults.

create_requires

    All non-nullable columns that are (1) not autoincrementing,
    (2) don't have a default value, are neither (3) nextvals,
    (4) sequences, nor (5) timestamps.

create_allows

    All nullable columns that are (1) not autoincrementing,
    (2) don't have a default value, are neither (3) nextvals,
    (4) sequences, nor (5) timestamps.

update_allows

    The union of create_requires and create_allows.

list_returns

    Every column in the class.

list_prefetch

    Nothing is prefetched by default.

list_prefetch_allows

    (1) An arrayref consisting of the name of each of the class's
    has_many relationships, accompanied by (2) a hashref keyed on
    the name of that relationship, whose values are the names of
    its has_many's, e.g., in the "Producer" controller above, a
    Producer has many cd_to_producers, many tags, and many tracks.
    None of those classes have any has_many's:

    list_prefetch_allows    =>  [
        [qw/cd_to_producer/], { 'cd_to_producer'  => [qw//] },
        [qw/tags/],           { 'tags'            => [qw//] },
        [qw/tracks/],         { 'tracks'          => [qw//] },
    ],

list_ordered_by

    The primary key.

list_search_exposes

    (1) An arrayref consisting of the name of each column in the class,
    and (2) a hashref keyed on the name of each of the class's has many
    relationships, the values of which are all the columns in the
    corresponding class, e.g.,

    list_search_exposes => [
        qw/cdid artist title year/,
        { 'cd_to_producer' => [qw/cd producer/] },
        { 'tags'           => [qw/tagid cd tag/] },
        { 'tracks'         => [qw/trackid cd position title last_updated_on/] },
    ],    # columns that can be searched on via list

CONTROLLERBASE

    Following the advice in L<Catalyst::Controller::DBIC::API/EXTENDING>, this
    module creates an intermediate class between your controllers and
    L<Catalyst::Controller::DBIC::API::REST>.  It contains one method, create,
    which serializes object information and stores it in the stash, which is
    not the default behavior.

METHODS

mk_compclass

    This is the meat of the helper. It writes the directory structure if it is
    not in place, API.pm, REST.pm, the controllerbase, and the result class
    controllers. It replaces $helper->{} values as it goes through, rendering
    the files for each.

AUTHOR

Amiri Barksdale <amiri@roosterpirates.com>

CONTRIBUTORS

Franck Cuny (lumberjaph) <franck@lumberjaph.net>

Pablo Rodríguez González <pablo.rodriguez.gonzalez@gmail.com>

Chris Weyl (RsrchBoy) <cweyl@alumni.drew.edu>

SEE ALSO

Catalyst::Controller::DBIC::API Catalyst::Controller::DBIC::API::REST Catalyst::Controller::DBIC::API::RPC

LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.