Mercurial > pub > Impl
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