diff Lib/IMPL/Web/Application/Resource.pm @ 375:441e84031c7b

docs
author cin
date Fri, 10 Jan 2014 16:33:00 +0400
parents 6608db5dcb81
children 2287c72f303a
line wrap: on
line diff
--- a/Lib/IMPL/Web/Application/Resource.pm	Thu Jan 09 19:40:33 2014 +0400
+++ b/Lib/IMPL/Web/Application/Resource.pm	Fri Jan 10 16:33:00 2014 +0400
@@ -84,7 +84,11 @@
 		or die NotFoundException->new( $this->location->url, $childId );
 
 	if (ref($children) eq 'HASH') {
-		return $children->{$childId};
+		if(my $child = $children->{$childId}) {
+			return $this->_isInvokable($child) ? $this->_invoke($child, $childId) : $child;
+		} else {
+			die NotFoundException->new( $this->location->url, $childId );
+		}
 	} elsif($this->_isInvokable($children)) {
 		return $this->_invoke($children,$childId);
 	} else {
@@ -302,6 +306,40 @@
 
 =head1 MEMBERS
 
+=head2 C<[get,set]verbs>
+
+Хеш с C<HTTP> методами. При попытке вызова C<HTTP> метода, которого нет в этом
+хеше приводит к исключению C<IMPL::Web::NotAllowedException>.
+
+=head2 C<[get,set]access>
+
+Метод для проверки прав доступа. Если не задан, то доспуп возможен для всех.
+
+=head2 C<[get,set]children>
+
+Дочерние ресурсы. Дочерние ресурсы могут быть описаны либо в виде хеша, либо
+в виде метода.
+
+=head3 C<HASH>
+
+Данный хещ содержит в себе таблицу идентификаторов дочерних ресурсов и их
+описаний.
+
+Описание каждого ресурса представляет собой либо функцию, либо параметры для
+создания ресурса C<CraeteChildResource>. Если описание в виде функции, то она
+должна возвращать либо объект типа ресурс либо параметры для его создания. 
+
+=head3 C<CODE>
+
+Если дочерние ресурсы описаны в виде функции (возможно использовать имя метода
+класса текущего ресурса), то для получения дочернего ресурса будет вызвана
+функция с параметрами C<($this,$childId)>, где C<$this> - текущий ресурс,
+C<$childId> - идентификатор дочернего ресурса, который нужно вернуть.
+
+Данная функция должна возвратить либо объект типа ресурс, либо ссылку на хеш с
+параметрами для создания оного при помощи метода
+C<CreateChildResource($params,$childId)>.
+
 =head2 C<[virtual]Fetch($childId)>
 
 Метод для получения дочернего ресурса.
@@ -311,7 +349,40 @@
 который добавляет недостающие параметры к возвращенным в данным методом и
 создает новый ресурс
 
-=head2 C<> 
+=head2 C<CreateChildResource($params,$id)>
+
+Создает новый дочерний ресурс с указанным идентификатором и параметрами.
+Автоматически заполняет параметры
+
+=over
+
+=item * C<parent>
+
+=item * C<id>
+
+=item * C<request>
+
+=back
+
+Тип создаваемого ресурса C<IMPL::Web::Application::Resource>, либо указывается
+в параметре C<class>.
+
+=head2 C<[virtual]HttpGet()>
+
+Реализует C<HTTP> метод C<GET>. По-умолчанию возвращает модель.
+
+Данный метод нужен для того, чтобы ресурс по-умолчанию поддерживал метод C<GET>,
+что является самым частым случаем, если нужно изменить данное поведение, нужно:
+
+=over
+
+=item * Передать в параметр конструктора C<get> значение undef
+
+=item * Переопределить метод C<HttpGet>
+
+=item * При проверке прав доступа выдать исключение 
+
+=back
 
 =cut