Mercurial > pub > Impl
comparison Lib/IMPL/Web/Application/Resource.pm @ 256:32aceba4ee6d
corrected ViewHandlers to handle cookies and headers.
Dirty hacks to handle binary data
RestController doesn't deal with file extensions anymore.
author | sergey |
---|---|
date | Wed, 12 Dec 2012 04:29:50 +0400 |
parents | 827cf96faa1c |
children | 4abda21186cd |
comparison
equal
deleted
inserted
replaced
255:827cf96faa1c | 256:32aceba4ee6d |
---|---|
1 package IMPL::Web::Application::Resource; | 1 package IMPL::Web::Application::Resource; |
2 use strict; | 2 use strict; |
3 | 3 |
4 use URI; | |
4 use IMPL::Const qw(:prop); | 5 use IMPL::Const qw(:prop); |
5 use IMPL::declare { | 6 use IMPL::declare { |
6 require => { | 7 require => { |
7 ViewResult => 'IMPL::Web::ViewResult', | 8 ViewResult => 'IMPL::Web::ViewResult', |
8 Exception => 'IMPL::Exception', | 9 Exception => 'IMPL::Exception', |
17 ], | 18 ], |
18 props => [ | 19 props => [ |
19 parent => PROP_RO, | 20 parent => PROP_RO, |
20 model => PROP_RO, | 21 model => PROP_RO, |
21 id => PROP_RO, | 22 id => PROP_RO, |
22 name => PROP_RO, | |
23 contract => PROP_RO, | 23 contract => PROP_RO, |
24 location => PROP_RO, | 24 location => PROP_RO, |
25 ] | 25 ] |
26 }; | 26 }; |
27 | 27 |
30 | 30 |
31 die ArgumentException->new( id => 'A resource identifier is required' ) | 31 die ArgumentException->new( id => 'A resource identifier is required' ) |
32 unless $args{id}; | 32 unless $args{id}; |
33 die ArgumentException->new( contract => 'A contract is required' ) | 33 die ArgumentException->new( contract => 'A contract is required' ) |
34 unless $args{contract}; | 34 unless $args{contract}; |
35 die ArgumentException->new( name => 'A name is required' ) | |
36 if $args{parent} && not(length $args{name}); | |
37 | 35 |
38 $this->parent( $args{parent} ); | 36 $this->parent( $args{parent} ); |
39 $this->model( $args{model} ); | 37 $this->model( $args{model} ); |
40 $this->id( $args{id} ); | 38 $this->id( $args{id} ); |
41 $this->contract( $args{contract} ); | 39 $this->contract( $args{contract} ); |
42 $this->name($args{name}); | |
43 | 40 |
44 # если расположение явно не указано, то оно вычисляется автоматически, | 41 # если расположение явно не указано, то оно вычисляется автоматически, |
45 # либо остается не заданным | 42 # либо остается не заданным |
46 $this->location( $args{location} || eval { $this->parent->location->Child( $this->name ) } ); | 43 $this->location( $args{location} || eval { $this->parent->location->Child( $this->id ) } ); |
47 } | 44 } |
48 | 45 |
49 sub InvokeHttpVerb { | 46 sub InvokeHttpVerb { |
50 my ( $this, $verb, $action ) = @_; | 47 my ( $this, $verb, $action ) = @_; |
51 | 48 |
170 =head2 C<[get]id> | 167 =head2 C<[get]id> |
171 | 168 |
172 Обязательное свойство ресурса, идентифицирует его в родительском контейнере, | 169 Обязательное свойство ресурса, идентифицирует его в родительском контейнере, |
173 для корневого ресурса может иметь произвольное значение. | 170 для корневого ресурса может иметь произвольное значение. |
174 | 171 |
175 =head2 C<[get]name> | |
176 | |
177 Имя ресурса в адресной строке. При разборе адреса идентификаторы ресурсов могут | |
178 не всегда совпадать с именами, например C<http://audio/sonar.mp3> может иметь | |
179 идентификатор C<sonar>, а его имя будет C<sonar.mp3>. Однако за частую имя | |
180 совпадает с идентификатором. | |
181 | |
182 =head2 C<[get]parent> | 172 =head2 C<[get]parent> |
183 | 173 |
184 Ссылка на родительский ресурс, для корневого ресурса не определена. | 174 Ссылка на родительский ресурс, для корневого ресурса не определена. |
185 | 175 |
186 =head2 C<[get]model> | 176 =head2 C<[get]model> |