Mercurial > pub > Impl
comparison Lib/IMPL/Web/Handler/JSONView.pm @ 256:32aceba4ee6d
corrected ViewHandlers to handle cookies and headers.
Dirty hacks to handle binary data
RestController doesn't deal with file extensions anymore.
author | sergey |
---|---|
date | Wed, 12 Dec 2012 04:29:50 +0400 |
parents | f48a1a9f4fa2 |
children | 52aae1b85084 |
comparison
equal
deleted
inserted
replaced
255:827cf96faa1c | 256:32aceba4ee6d |
---|---|
1 package IMPL::Web::Handler::JSONView; | 1 package IMPL::Web::Handler::JSONView; |
2 use strict; | 2 use strict; |
3 use JSON; | 3 use JSON; |
4 | 4 |
5 use IMPL::lang qw(is); | |
5 use IMPL::declare { | 6 use IMPL::declare { |
6 require => { | 7 require => { |
7 HttpResponse => 'IMPL::Web::HttpResponse', | 8 HttpResponse => 'IMPL::Web::HttpResponse', |
8 ViewResult => '-IMPL::Web::ViewResult' | 9 ViewResult => '-IMPL::Web::ViewResult' |
9 }, | 10 }, |
22 my ($this,$action,$next) = @_; | 23 my ($this,$action,$next) = @_; |
23 | 24 |
24 my $result = $next ? $next->($action) : undef; | 25 my $result = $next ? $next->($action) : undef; |
25 | 26 |
26 | 27 |
27 my $model = ( ref $result and eval { $result->isa(ViewResult) } ) | 28 my $model = ( ref $result and is($result,ViewResult) ) |
28 ? $result->model | 29 ? $result->model |
29 : $result; | 30 : $result; |
30 | 31 |
31 $model = [$model] unless ref $model; | 32 $model = [$model] unless ref $model; |
32 | 33 |
33 return HttpResponse->new({ | 34 my %params = ( |
34 type => $this->contentType, | 35 type => $this->contentType, |
35 charset => 'utf-8', | 36 charset => 'utf-8', |
36 body => JSON->new->utf8->pretty->encode($model) | 37 body => JSON->new->utf8->pretty->encode($model) |
37 }); | 38 ); |
39 | |
40 if(is($result,ViewResult)) { | |
41 $params{status} = $result->status if $result->status; | |
42 $params{headers} = $result->headers if $result->headers; | |
43 $params{cookies} = $result->cookies if $result->cookies; | |
44 } | |
45 | |
46 return HttpResponse->new( | |
47 %params | |
48 ); | |
38 } | 49 } |
39 | 50 |
40 1; | 51 1; |
41 | 52 |
42 __END__ | 53 __END__ |