WSST::CodeTemplate - CodeTemplate class of WSST


WSST documentation Contained in the WSST distribution.

Index


Code Index:

NAME

Top

WSST::CodeTemplate - CodeTemplate class of WSST

DESCRIPTION

Top

CodeTemplate is class encapsulating the Template Toolkit.

METHODS

Top

new

Constructor.

get

Returns template variable of the specified name.

set

Set template variable.

expand

Expand the specified template file.

new_template

Create new Template object.

SEE ALSO

Top

http://code.google.com/p/wsst/

AUTHORS

Top

Mitsuhisa Oshikawa <mitsuhisa [at] gmail.com> Yusuke Kawasaki <u-suke [at] kawa.net>

COPYRIGHT AND LICENSE

Top


WSST documentation Contained in the WSST distribution.

package WSST::CodeTemplate;

use strict;
use Template;

our $VERSION = '0.1.1';

sub new {
    my $class = shift;
    
    my $self = {@_};
    $self->{tmpl_dirs} ||= [];
    $self->{vars} ||= {};
    
    bless($self, $class);
    
    return $self;
}

sub get {
    my $self = shift;
    my $key = shift;
    return $self->{vars}->{$key};
}

sub set {
    my $self = shift;
    %{$self->{vars}} = (%{$self->{vars}}, @_);
}

sub expand {
    my $self = shift;
    my $name = shift;
    my %local_vars = @_;
    
    my $tmpl = $self->new_template($name);
    
    my $vars = {%{$self->{vars}}, %local_vars};
    
    my $output;
    my $res = $tmpl->process($name, $vars, \$output);

    die "TemplateError: $name: " . $tmpl->error() unless $res;
    
    foreach my $key (keys %$vars) {
        next if exists $local_vars{$key};
        $self->{vars}->{$key} = $vars->{$key};
    }
    
    return $output;
}

sub new_template {
    my $self = shift;
    my $name = shift;

    my $conf = {
        INCLUDE_PATH => $self->{tmpl_dirs},
    };
    return Template->new($conf);
}

1;