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 )