Mercurial > pub > Impl
comparison Lib/IMPL/DOM/Transform/QueryToDOM.pm @ 244:a02b110da931
refactoring
fixed binding to CGI query parameters with multiple values
| author | sergey |
|---|---|
| date | Mon, 22 Oct 2012 04:09:27 +0400 |
| parents | b8c724f6de36 |
| children | 129e48bb5afb |
comparison
equal
deleted
inserted
replaced
| 243:cd2b1f121029 | 244:a02b110da931 |
|---|---|
| 14 | 14 |
| 15 sub CTOR { | 15 sub CTOR { |
| 16 my ($this) = @_; | 16 my ($this) = @_; |
| 17 | 17 |
| 18 $this->templates->{'CGI'} = \&TransformCGI; | 18 $this->templates->{'CGI'} = \&TransformCGI; |
| 19 $this->templates->{'CGIWrapper'} = \&TransformCGI; | 19 |
| 20 | |
| 21 $this->delimiter('[.]'); | 20 $this->delimiter('[.]'); |
| 22 $this->prefix(''); | 21 $this->prefix(''); |
| 23 } | 22 } |
| 24 | 23 |
| 25 sub TransformCGI { | 24 sub TransformCGI { |
| 29 | 28 |
| 30 my $prefix = $this->prefix; | 29 my $prefix = $this->prefix; |
| 31 my $delim = $this->delimiter; | 30 my $delim = $this->delimiter; |
| 32 | 31 |
| 33 foreach my $param (grep index($_,$prefix) >= 0 , $query->param()) { | 32 foreach my $param (grep index($_,$prefix) >= 0 , $query->param()) { |
| 34 length (my $value = $query->param($param)) or next; | 33 |
| 34 my @value = grep length($_), $query->param($param) or next; | |
| 35 | 35 |
| 36 my @parts = split /$delim/,$param; | 36 my @parts = split /$delim/,$param; |
| 37 | 37 |
| 38 my $node = $data; | 38 my $node = $data; |
| 39 while ( my $part = shift @parts ) { | 39 while ( my $part = shift @parts ) { |
| 44 } else { | 44 } else { |
| 45 $node = ($node->{$name} ||= {}); | 45 $node = ($node->{$name} ||= {}); |
| 46 } | 46 } |
| 47 } else { | 47 } else { |
| 48 if(defined $index) { | 48 if(defined $index) { |
| 49 $node->{$name}[$index] = $value; | 49 $node->{$name}[$index] = (@value == 1 ? $value[0] : \@value); |
| 50 } else { | 50 } else { |
| 51 $node->{$name} = $value; | 51 $node->{$name} = (@value == 1 ? $value[0] : \@value); |
| 52 } | 52 } |
| 53 } | 53 } |
| 54 } | 54 } |
| 55 } | 55 } |
| 56 } | 56 } |
