VERSION
Version 0.06
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
and L 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.
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, this module creates an
intermediate class between your controllers and L.
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
SEE ALSO
LICENSE
This library is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.