Mercurial > pub > Impl
comparison Lib/IMPL/Web/Application/Resource.pm @ 255:827cf96faa1c
refactoring (incomplete)
author | sergey |
---|---|
date | Fri, 07 Dec 2012 16:58:19 +0400 |
parents | 814d755e5d12 |
children | 32aceba4ee6d |
comparison
equal
deleted
inserted
replaced
254:fb52014f6931 | 255:827cf96faa1c |
---|---|
14 base => [ | 14 base => [ |
15 'IMPL::Object' => undef, | 15 'IMPL::Object' => undef, |
16 'IMPL::Web::Application::ResourceInterface' => undef | 16 'IMPL::Web::Application::ResourceInterface' => undef |
17 ], | 17 ], |
18 props => [ | 18 props => [ |
19 parent => PROP_GET | PROP_OWNERSET, | 19 parent => PROP_RO, |
20 model => PROP_GET | PROP_OWNERSET, | 20 model => PROP_RO, |
21 id => PROP_GET | PROP_OWNERSET, | 21 id => PROP_RO, |
22 contract => PROP_GET | PROP_OWNERSET, | 22 name => PROP_RO, |
23 location => PROP_GET | PROP_OWNERSET | 23 contract => PROP_RO, |
24 location => PROP_RO, | |
24 ] | 25 ] |
25 }; | 26 }; |
26 | 27 |
27 sub CTOR { | 28 sub CTOR { |
28 my ( $this, %args ) = @_; | 29 my ( $this, %args ) = @_; |
29 | 30 |
30 die ArgumentException->new( id => 'A resource identifier is required' ) | 31 die ArgumentException->new( id => 'A resource identifier is required' ) |
31 unless $args{id}; | 32 unless $args{id}; |
32 die ArgumentException->new( contract => 'A contract is required' ) | 33 die ArgumentException->new( contract => 'A contract is required' ) |
33 unless $args{id}; | 34 unless $args{contract}; |
35 die ArgumentException->new( name => 'A name is required' ) | |
36 if $args{parent} && not(length $args{name}); | |
34 | 37 |
35 $this->parent( $args{parent} ); | 38 $this->parent( $args{parent} ); |
36 $this->model( $args{model} ); | 39 $this->model( $args{model} ); |
37 $this->id( $args{id} ); | 40 $this->id( $args{id} ); |
38 $this->contract( $args{contract} ); | 41 $this->contract( $args{contract} ); |
42 $this->name($args{name}); | |
39 | 43 |
40 # если расположение явно не указано, то оно вычисляется автоматически, | 44 # если расположение явно не указано, то оно вычисляется автоматически, |
41 # либо остается не заданным | 45 # либо остается не заданным |
42 $this->location( $args{location} || eval { $this->parent->location->Child( $this->id ) } ); | 46 $this->location( $args{location} || eval { $this->parent->location->Child( $this->name ) } ); |
43 } | 47 } |
44 | 48 |
45 sub InvokeHttpVerb { | 49 sub InvokeHttpVerb { |
46 my ( $this, $verb, $action ) = @_; | 50 my ( $this, $verb, $action ) = @_; |
47 | 51 |
166 =head2 C<[get]id> | 170 =head2 C<[get]id> |
167 | 171 |
168 Обязательное свойство ресурса, идентифицирует его в родительском контейнере, | 172 Обязательное свойство ресурса, идентифицирует его в родительском контейнере, |
169 для корневого ресурса может иметь произвольное значение. | 173 для корневого ресурса может иметь произвольное значение. |
170 | 174 |
175 =head2 C<[get]name> | |
176 | |
177 Имя ресурса в адресной строке. При разборе адреса идентификаторы ресурсов могут | |
178 не всегда совпадать с именами, например C<http://audio/sonar.mp3> может иметь | |
179 идентификатор C<sonar>, а его имя будет C<sonar.mp3>. Однако за частую имя | |
180 совпадает с идентификатором. | |
181 | |
171 =head2 C<[get]parent> | 182 =head2 C<[get]parent> |
172 | 183 |
173 Ссылка на родительский ресурс, для корневого ресурса не определена. | 184 Ссылка на родительский ресурс, для корневого ресурса не определена. |
174 | 185 |
175 =head2 C<[get]model> | 186 =head2 C<[get]model> |