whitespace clean up
[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
406086f3 17Provides a REST style API interface to the functionality described in L<Catalyst::Controller::DBIC::API>.
d2739840 18
19By default provides the following endpoints:
20
609916e5 21 $base (operates on lists of objects and accepts GET, PUT, POST and DELETE)
22 $base/[identifier] (operates on a single object and accepts GET, PUT, POST and DELETE)
d2739840 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
406086f3 35 ( action => { setup => { PathPart => 'track', Chained => '/api/rest/rest_base' } },
d2739840 36 ...
37 );
38
609916e5 39=method_protected no_id
d2739840 40
533075c7 41Chained: L</objects_no_id>
d2739840 42PathPart: none
43CaptureArgs: 0
44
3d85db11 45Calls list level methods described in L<Catalyst::Controller::DBIC::API> as follows:
d2739840 46
609916e5 47DELETE: L<Catalyst::Controller::DBIC::API/delete>
48POST/PUT: L<Catalyst::Controller::DBIC::API/update_or_create>
d2739840 49GET: forwards to L<Catalyst::Controller::DBIC::API/list>
50
51=cut
52
3d85db11 53sub no_id : Chained('objects_no_id') PathPart('') ActionClass('REST') :Args(0) {}
d2739840 54
8cf0b66a 55sub no_id_PUT
56{
d2739840 57 my ( $self, $c ) = @_;
3d85db11 58 $self->update_or_create($c);
d2739840 59}
60
8cf0b66a 61sub no_id_POST
62{
d2739840 63 my ( $self, $c ) = @_;
3d85db11 64 $self->update_or_create($c);
d2739840 65}
66
8cf0b66a 67sub no_id_DELETE
68{
d2739840 69 my ( $self, $c ) = @_;
3d85db11 70 $self->delete($c);
d2739840 71}
72
8cf0b66a 73sub no_id_GET
74{
d2739840 75 my ( $self, $c ) = @_;
3d85db11 76 $self->list($c);
d2739840 77}
78
609916e5 79=method_protected with_id
80
81Chained: L</object_with_id>
82PathPart: none
83CaptureArgs: 0
84
85Forwards to list level methods described in L<Catalyst::Controller::DBIC::API> as follows:
86
87DELETE: L<Catalyst::Controller::DBIC::API/delete>
88POST/PUT: L<Catalyst::Controller::DBIC::API/update_or_create>
89GET: forwards to L<Catalyst::Controller::DBIC::API/item>
90
91=cut
92
3d85db11 93sub with_id :Chained('object_with_id') :PathPart('') :ActionClass('REST') :Args(0) {}
8cf0b66a 94
95sub with_id_PUT
96{
97 my ( $self, $c ) = @_;
3d85db11 98 $self->update_or_create($c);
8cf0b66a 99}
100
101sub with_id_POST
102{
103 my ( $self, $c ) = @_;
3d85db11 104 $self->update_or_create($c);
8cf0b66a 105}
106
107sub with_id_DELETE
108{
109 my ( $self, $c ) = @_;
3d85db11 110 $self->delete($c);
8cf0b66a 111}
112
113sub with_id_GET
114{
115 my ( $self, $c ) = @_;
3d85db11 116 $self->item($c);
8cf0b66a 117}
118
d2739840 1191;