Mercurial > pub > Impl
view Lib/Engine/Output/JSON.pm @ 128:08753833173d
Fixed a error handling issue in JSON output: errors are correctly transfered
A complete documentation for a IMPL::Web::Application::ControllerUnit
author | wizard |
---|---|
date | Tue, 15 Jun 2010 02:41:07 +0400 |
parents | 16ada169ca75 |
children |
line wrap: on
line source
package Configuration; our $HtDocsDir; package Engine; our $Encoding; package Engine::Output::JSON; use strict; use warnings; use Encode; use PerlIO; use IMPL::Exception; use JSON; sub CTX_TEMPLATE() { 1 } sub CTX_DATA() { 2 } my $context = CTX_DATA; our $Data; sub template() { $context = CTX_TEMPLATE } sub data() { $context = CTX_DATA } sub Print { my ($class,$query,$action) = @_; my @path = $action->RequestURI->path_segments; shift @path; my $result; undef $@; $Data = $action->Result; eval { my $fname = $HtDocsDir . join '/', @path; if ($context == CTX_DATA) { my $dummy = ''; open my $hstd, ">>", \$dummy or die new IMPL::Exception('Failed to create inmemory stream'); local (*STDIN,*STDOUT) = ($hstd,$hstd); local ${^ENCODING}; $result = do $fname or die new IMPL::Exception('Failed to evalute the file', $@, $!,$fname); } else { die new IMPL::Exception('JSON templates not implemented'); } }; if ($@) { $result = { errorCode => 1, errorMessage => "$@"}; } print $query->header(-status => 200, -type => 'text/javascript'); print to_json({ errorCode => 0, result => $result }); } 1;