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>