Add failing test for updating related rows with ::REST.
[catagits/Catalyst-Controller-DBIC-API.git] / lib / Catalyst / Controller / DBIC / API / REST.pm
CommitLineData
d2739840 1package Catalyst::Controller::DBIC::API::REST;
2
3#ABSTRACT: Provides a REST interface to DBIx::Class
4use Moose;
5BEGIN { extends 'Catalyst::Controller::DBIC::API'; }
6
7__PACKAGE__->config(
8 'default' => 'application/json',
9 'stash_key' => 'response',
10 'map' => {
11 'application/x-www-form-urlencoded' => 'JSON',
12 'application/json' => 'JSON',
13 });
14
15=head1 DESCRIPTION
16
17Provides a REST style API interface to the functionality described in L<Catalyst::Controller::DBIC::API>.
18
19By default provides the following endpoints:
20
21 $base (accepts PUT and GET)
22 $base/[identifier] (accepts POST and DELETE)
23
24Where $base is the URI described by L</setup>, the chain root of the controller, and the request type will determine the L<Catalyst::Controller::DBIC::API> method to forward.
25
26=method_protected setup
27
28Chained: override
29PathPart: override
30CaptureArgs: 0
31
32As described in L<Catalyst::Controller::DBIC::API/setup>, this action is the chain root of the controller but has no pathpart or chain parent defined by default, so these must be defined in order for the controller to function. The neatest way is normally to define these using the controller's config.
33
34 __PACKAGE__->config
35 ( action => { setup => { PathPart => 'track', Chained => '/api/rest/rest_base' } },
36 ...
37 );
38
39=method_protected base
40
41Chained: L</setup>
42PathPart: none
43CaptureArgs: 0
44
45Forwards to list level methods described in L<Catalyst::Controller::DBIC::API> as follows:
46
47DELETE: forwards to L<Catalyst::Controller::DBIC::API/object> then L<Catalyst::Controller::DBIC::API/delete>
48POST/PUT: forwards to L<Catalyst::Controller::DBIC::API/object> then L<Catalyst::Controller::DBIC::API/update_or_create>
49GET: forwards to L<Catalyst::Controller::DBIC::API/list>
50
51=cut
52
73517f50 53sub base : Chained('setup') PathPart('') ActionClass('REST') Args {}
d2739840 54
55sub base_PUT {
56 my ( $self, $c ) = @_;
57
58 $c->forward('object');
59 return if $self->get_errors($c);
60 $c->forward('update_or_create');
61}
62
63sub base_POST {
64 my ( $self, $c ) = @_;
65
66 $c->forward('object');
67 return if $self->get_errors($c);
68 $c->forward('update_or_create');
69}
70
71sub base_DELETE {
72 my ( $self, $c ) = @_;
d2739840 73 $c->forward('object');
74 return if $self->get_errors($c);
75 $c->forward('delete');
76}
77
78sub base_GET {
79 my ( $self, $c ) = @_;
80
81 $c->forward('list');
82}
83
841;