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> |
