# HG changeset patch # User sergey # Date 1357739743 -14400 # Node ID c9c2ec29793f9066374518477ac628d6fa81970f # Parent 0f59b2de72af5a4492910c3d2d8a0967b0af65d1 *IMPL::DOM::Transform: updated documentation diff -r 0f59b2de72af -r c9c2ec29793f Lib/IMPL/DOM/Transform/ObjectToDOM.pm --- 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 для преобразования значения свойства, при этом C указывает на только что созданный элемент документа. +Для изменения поведения преобразования можно добавлять новые обработчики, как +в случае со стандартным преобразованием, а также можно унаследовать текущий +класс для переопределения его некоторых методов. + =head1 MEMBERS =head2 C diff -r 0f59b2de72af -r c9c2ec29793f Lib/IMPL/DOM/Transform/QueryToDOM.pm --- 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 - преобразование 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. Добавляет метод +C который применятеся к объектам типа C (и производных). + +Запрос C сначала приводится к хешу, затем полученный хеш преобразуется +в DOM документ при помощи вызова метода C. + +Для этого выбираются параметры запроса, затем, имя каждого параметра +рассматривается в виде пути к свойству, создается структура из хешей и массивов +в которую по указанному пути кладется значение. + +Если параметр имеет несколько значений, значит свойство является массивом. + +Также изменено поведение некоторых методов преобразования. + +=over + +=item * C + +Преобразование для простого значения свойства. Посокльку в запросе передаются +строковые значения, а схема документа может предполпгать другие типы, при +преобразовании значения параметра из запроса к значению узла используется +метод C<< $this->inflateNodeValue($value) >>, также помимо значения +C<< $this->currentNode->nodeValue >> задается атрибут +C<< $this->currentNode->nodeProperty( rawValue => $value) >>, для того, чтобы +была возможность получить оригинальное значение параметра запроса (например, +в случае когда его формат был не верным и C будет C). + +=item * C + +Данный метод вызывается если текущий узел (переданный в параметре 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