diff Lib/IMPL/DOM/Transform/QueryToDOM.pm @ 264:c9c2ec29793f

*IMPL::DOM::Transform: updated documentation
author sergey
date Wed, 09 Jan 2013 17:55:43 +0400
parents 129e48bb5afb
children b56b1ec33b59
line wrap: on
line diff
--- a/Lib/IMPL/DOM/Transform/QueryToDOM.pm	Wed Jan 09 05:17:44 2013 +0400
+++ b/Lib/IMPL/DOM/Transform/QueryToDOM.pm	Wed Jan 09 17:55:43 2013 +0400
@@ -15,7 +15,7 @@
 sub CTOR {
 	my ($this) = @_;
 	
-	$this->templates->{'CGI'} = \&TransformCGI;
+	$this->templates->{'CGI'} = 'TransformCGI';
 
 	$this->delimiter('[.]');
 	$this->prefix('');
@@ -37,6 +37,8 @@
     return $node;
 }
 
+#TODO: support a.b[0][1].c[1]
+
 sub TransformCGI {
 	my ($this,$query) = @_;
 
@@ -74,4 +76,89 @@
     return $this->Transform($data);
 }
 
-1;
\ No newline at end of file
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+C<IMPL::DOM::Transform::QueryToDOM> - преобразование CGI запроса в DOM документ.
+
+=head1 SYNOPSIS
+
+=begin code
+
+use CGI();
+use IMPL::require {
+    Schema => 'IMPL::DOM::Schema',
+    Config => 'IMPL::Config',
+    QueryToDOM => 'IMPL::DOM::Transform::QueryToDOM'
+}
+
+my $q = CGI->new();
+
+my $schema = Schema->LoadSchema(Config->AppBase('schemas','person.xml'));
+my $transorm = QueryToDOM->new('edit', $schema);
+
+my $form = $transform->Transform($q);
+
+my @errors;
+    
+push @errors, $transform->buildErrors;
+push @errors, $schema->Validate($doc);
+
+
+=end code
+
+=head1 DESCRIPTION
+
+Наследует C<IMPL::DOM::Transform::ObjectToDOM>. Добавляет метод
+C<TransformCGI> который применятеся к объектам типа C<CGI> (и производных).
+
+Запрос C<CGI> сначала приводится к хешу, затем полученный хеш преобразуется
+в DOM документ при помощи вызова метода C<Transform>.
+
+Для этого выбираются параметры запроса, затем, имя каждого параметра
+рассматривается в виде пути к свойству, создается структура из хешей и массивов
+в которую по указанному пути кладется значение.
+
+Если параметр имеет несколько значений, значит свойство является массивом.
+
+Также изменено поведение некоторых методов преобразования.
+
+=over
+
+=item * C<TransformPlain($value)>
+
+Преобразование для простого значения свойства. Посокльку в запросе передаются
+строковые значения, а схема документа может предполпгать другие типы, при
+преобразовании значения параметра из запроса к значению узла используется
+метод C<< $this->inflateNodeValue($value) >>, также помимо значения
+C<< $this->currentNode->nodeValue >> задается атрибут
+C<< $this->currentNode->nodeProperty( rawValue => $value) >>, для того, чтобы
+была возможность получить оригинальное значение параметра запроса (например,
+в случае когда его формат был не верным и C<nodeValue> будет C<undef>).
+
+=item * C<StoreObject($node,$object)>
+
+Данный метод вызывается если текущий узел (переданный в параметре C<$node>)
+предполагает простое значение, однако в запросе для него было передано сложное
+содержимое. Данная реализация просто игнорирует переданный объект C<$object>
+и возвращает C<$node> без изменений. 
+
+=back
+
+=head1 MEMBERS
+
+=head2 C<[get]delimiter>
+
+REGEX. Разделитель свойств в имени параметра, по-умолчанию C<'[.]'> 
+
+=head2 C<[get]prefix>
+
+Строка, префикс имен параметров, которые участвуют в формировании документа.
+По-умолчанию пусто.
+
+=cut
\ No newline at end of file