changeset 264:c9c2ec29793f

*IMPL::DOM::Transform: updated documentation
author sergey
date Wed, 09 Jan 2013 17:55:43 +0400
parents 0f59b2de72af
children 6b6d4b2275a1
files Lib/IMPL/DOM/Transform/ObjectToDOM.pm Lib/IMPL/DOM/Transform/QueryToDOM.pm
diffstat 2 files changed, 93 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/Lib/IMPL/DOM/Transform/ObjectToDOM.pm	Wed Jan 09 05:17:44 2013 +0400
+++ b/Lib/IMPL/DOM/Transform/ObjectToDOM.pm	Wed Jan 09 17:55:43 2013 +0400
@@ -218,6 +218,10 @@
 затем вызывается метод C<Transform> для преобразования значения свойства, при
 этом C<currentNode> указывает на только что созданный элемент документа.
 
+Для изменения поведения преобразования можно добавлять новые обработчики, как
+в случае со стандартным преобразованием, а также можно унаследовать текущий
+класс для переопределения его некоторых методов.
+
 =head1 MEMBERS
 
 =head2 C<CTOR($docName,$schema)>
--- 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