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>