Mercurial > pub > Impl
annotate Lib/IMPL/Web/Application/RestCustomResource.pm @ 201:0c018a247c8a
Reworked REST resource classes to be more transparent and intuitive
author | sergey |
---|---|
date | Tue, 24 Apr 2012 19:52:07 +0400 |
parents | a9dbe534d236 |
children | 5146e17a7b76 |
rev | line source |
---|---|
200 | 1 package IMPL::Web::Application::RestCustomResource; |
2 use strict; | |
3 | |
4 use IMPL::lang qw(:declare :constants); | |
5 use IMPL::declare { | |
6 require => { | |
7 Exception => "IMPL::Exception", | |
8 ArgumentException => '-IMPL::InvalidArgumentException', | |
201
0c018a247c8a
Reworked REST resource classes to be more transparent and intuitive
sergey
parents:
200
diff
changeset
|
9 ForbiddenException => 'IMPL::Web::ForbiddenException', |
0c018a247c8a
Reworked REST resource classes to be more transparent and intuitive
sergey
parents:
200
diff
changeset
|
10 NotFoundException => 'IMPL::Web::NotFoundException' |
200 | 11 }, |
12 base => { | |
13 'IMPL::Web::Application::RestBaseResource' => '@_' | |
14 } | |
15 }; | |
16 | |
17 BEGIN { | |
18 public property get => PROP_GET | PROP_OWNERSET; | |
19 public property put => PROP_GET | PROP_OWNERSET; | |
20 public property post => PROP_GET | PROP_OWNERSET; | |
21 public property delete => PROP_GET | PROP_OWNERSET; | |
22 } | |
23 | |
24 sub CTOR { | |
25 my ($this) = @_; | |
26 | |
27 die ArgumentException->new("parent") unless $this->parent; | |
28 } | |
29 | |
30 sub FetchChildResource { | |
31 my ($this,$id,$action) = @_; | |
32 | |
201
0c018a247c8a
Reworked REST resource classes to be more transparent and intuitive
sergey
parents:
200
diff
changeset
|
33 die NotFoundException->new() if $this->final; |
0c018a247c8a
Reworked REST resource classes to be more transparent and intuitive
sergey
parents:
200
diff
changeset
|
34 |
200 | 35 return $this->contract->Transform( $this->GetImpl($action), { parent => $this, id => $id } )->FetchChildResource($id,$action); |
36 } | |
37 | |
38 sub GetImpl { | |
39 my ($this,$action) = @_; | |
40 | |
41 my $method = $this->get or die ForbiddenException->new(); | |
201
0c018a247c8a
Reworked REST resource classes to be more transparent and intuitive
sergey
parents:
200
diff
changeset
|
42 return $this->InvokeMember($method,$action); |
200 | 43 } |
44 | |
45 sub PutImpl { | |
46 my ($this,$action) = @_; | |
47 my $method = $this->put or die ForbiddenException->new(); | |
201
0c018a247c8a
Reworked REST resource classes to be more transparent and intuitive
sergey
parents:
200
diff
changeset
|
48 return $this->InvokeMember($method,$action); |
200 | 49 } |
50 | |
51 sub PostImpl { | |
52 my ($this,$action) = @_; | |
53 my $method = $this->post or die ForbiddenException->new(); | |
201
0c018a247c8a
Reworked REST resource classes to be more transparent and intuitive
sergey
parents:
200
diff
changeset
|
54 return $this->InvokeMember($method,$action); |
200 | 55 } |
56 | |
57 sub DeleteImpl { | |
58 my ($this,$action) = @_; | |
59 my $method = $this->delete or die ForbiddenException->new(); | |
201
0c018a247c8a
Reworked REST resource classes to be more transparent and intuitive
sergey
parents:
200
diff
changeset
|
60 return $this->InvokeMember($method,$action); |
200 | 61 } |
62 | |
63 1; |