BusyBird
view release on metacpan or search on metacpan
lib/BusyBird/Main/PSGI/View.pm view on Meta::CPAN
package BusyBird::Main::PSGI::View;
use v5.8.0;
use strict;
use warnings;
use BusyBird::Util qw(set_param split_with_entities);
use Carp;
use Try::Tiny;
use Scalar::Util qw(weaken);
use JSON qw(to_json);
use Text::Xslate qw(html_builder html_escape);
use File::Spec;
use Encode ();
use JavaScript::Value::Escape ();
use DateTime::TimeZone;
use BusyBird::DateTime::Format;
use BusyBird::Log qw(bblog);
use BusyBird::SafeData qw(safed);
use Cache::Memory::Simple;
use Plack::Util ();
use Tie::IxHash;
sub new {
my ($class, %args) = @_;
my $self = bless {
main_obj => undef,
renderer => undef,
}, $class;
$self->set_param(\%args, "main_obj", undef, 1);
$self->set_param(\%args, "script_name", undef, 1);
my $sharedir = $self->{main_obj}->get_config('sharedir_path');
$sharedir =~ s{/+$}{};
$self->{renderer} = Text::Xslate->new(
path => [ File::Spec->catdir($sharedir, 'www', 'templates') ],
cache_dir => File::Spec->tmpdir,
syntax => 'Kolon',
function => $self->template_functions(),
warn_handler => sub {
bblog("warn", @_);
},
## we don't use die_handler because (1) it is called for every
## death even when it's in eval() scope, (2) exceptions are
## caught by Xslate and passed to warn_handler anyway.
);
return $self;
}
sub response_notfound {
my ($self, $message) = @_;
$message ||= 'Not Found';
return ['404',
['Content-Type' => 'text/plain',
'Content-Length' => length($message)],
[$message]];
}
sub response_error_html {
my ($self, $http_code, $message) = @_;
return $self->_response_template(
template => 'error.tx', args => {error => $message},
code => $http_code
);
}
sub response_json {
my ($self, $res_code, $response_object) = @_;
my $message = try {
( run in 1.588 second using v1.01-cache-2.11-cpan-39bf76dae61 )