# HG changeset patch # User sergey # Date 1350308352 -14400 # Node ID 61db68166c37ede7b5b8eb38b26ff342c5c6284d # Parent 2904da230022ff9ebe16999c8698592400b8d0c7 refactoring QueryToDOM diff -r 2904da230022 -r 61db68166c37 Lib/IMPL/DOM/Transform/ObjectToDOM.pm --- a/Lib/IMPL/DOM/Transform/ObjectToDOM.pm Mon Oct 15 04:23:01 2012 +0400 +++ b/Lib/IMPL/DOM/Transform/ObjectToDOM.pm Mon Oct 15 17:39:12 2012 +0400 @@ -25,7 +25,7 @@ }; sub CTOR { - my ($this,$docName,$docSchema) = @_; + my ($this,$docName,$docSchema,$transforms) = @_; my $docNodeSchema = $docSchema->selectSingleNode(sub { $_->name eq $docName }) or die OperationException->new("Can't find a node schema for the document '$docName'"); diff -r 2904da230022 -r 61db68166c37 Lib/IMPL/DOM/Transform/QueryToDOM.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/IMPL/DOM/Transform/QueryToDOM.pm Mon Oct 15 17:39:12 2012 +0400 @@ -0,0 +1,52 @@ +package IMPL::DOM::Transform::QueryToDOM; +use strict; + +use IMPL::Const qw(:prop); +use IMPL::declare { + base => [ + 'IMPL::DOM::Transform::ObjectToDOM' => '@_' + ], + props => [ + prefix => PROP_RO, + delimier => PROP_RO + ] +}; + +sub CTOR { + my ($this) = @_; + + $this->templates->{'CGI'} = \&TransformCGI; + $this->templates->{'CGIWrapper'} = \&TransformCGI; + + $this->delimier('.'); +} + +sub TransformCGI { + my ($this,$query) = @_; + + my $data={}; + + my $prefix = $this->prefix; + my $delim = $this->delimiter; + + foreach my $param (grep index($_,$prefix) >= 0 , $query->param()) { + length (my $value = $query->param($param)) or next; + + my @parts = split /\//,$param; + + my $node = $data; + while ( my $part = shift @parts ) { + if (@parts) { + $node = ($node->{$part} ||= {}); + } else { + $node->{$part} = $value; + } + } + } + + if (keys %$data > 1) { + $data = { document => $data }; + } + + return $this->Transform($data); +} \ No newline at end of file