Async-Template
view release on metacpan or search on metacpan
lib/Async/Template/Context.pm view on Meta::CPAN
package Async::Template::Context;
#! @file
#! @author: Serguei Okladnikov <oklaspec@gmail.com>
#! @date 01.10.2012
#! This source file have functions `process_enter()` and `process_leave()`.
#! Code parts of them taken from function `process()` of template toolkit
#! library and substantially enhanced, the asynchronous processing
#! is introduced by Serguei Okladnikov <oklaspec@gmail.com>
#! Author of that original code parts is Andy Wardley <abw@wardley.org>
use strict;
use warnings;
use base 'Template::Context';
use Scalar::Util 'blessed';
our $VERSION = 0.14;
our $DYNAMIC = 0 unless defined $DYNAMIC;
#use constant DOCUMENT => Template::Context::DOCUMENT;
use constant DOCUMENT => 'Async::Template::Document';
sub event_output {
$_[0]->{_event_output};
}
sub set_event_output {
$_[0]->{_event_output} = $_[1];
}
sub event_clear {
$_[0]->{event_stack} = [];
}
sub event_done {
my ( $self, $res ) = @_;
my $ev = $self->event_pop();
if( $ev->{resvar} ) {
$self->stash->set( $ev->{resvar}, $res );
}
# TODO: here exeptions not handled, and not reevented
my $output = $ev->{event}->( $self, \$res );
}
sub event_push {
push @{ $_[0]->{event_stack} }, $_[1];
}
sub event_pop {
pop @{ $_[0]->{event_stack} };
}
sub event_top {
return $_[0]->{event_stack}->[ $#{ $_[0]->{event_stack} } ];
}
sub do_return {
my ( $self, $res ) = @_;
my $ev = $self->{event_stack}->[0];
$ev->{event}->( $self, $res );
}
( run in 1.011 second using v1.01-cache-2.11-cpan-39bf76dae61 )