The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

VERSION

Version 0.03

NAME

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

SYNOPSIS

    $ catalyst.pl myapp
    $ cd myapp
    $ script/myapp_create.pl controller API::REST DBIC::API::REST myapp

    ...

    package myapp::Controller::API::REST::Producer;

    use strict;
    use warnings;
    use base qw/myapp::ControllerBase::REST/;
    use JSON::Syck;

    __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. Your
  application must access your model at myapp::Model::DB.

  It creates the following files:
    
    myapp/lib/myapp/Controller/API.pm
    myapp/lib/myapp/Controller/API/REST.pm
    myapp/lib/myapp/Controller/API/REST/*   (this is where the individual class controllers are located)
    myapp/lib/myapp/ControllerBase/REST.pm

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@metalabel.com>

SEE ALSO

LICENSE

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

1 POD Error

The following errors were encountered while parsing the POD:

Around line 147:

=back without =over