The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package App::TemplateServer::Provider::Mason;
use Moose;
use Method::Signatures;
use File::Find;
use HTML::Mason::Interp;
use Path::Class qw(file);
use feature ':5.10';

our $VERSION = '0.01';

with 'App::TemplateServer::Provider::Filesystem';

method render_template($template, $context){
    my $outbuf;
    
    my %data = %{$context->data||{}};
    my @globals = map { "\$$_" } keys %data;
    
    my $interp = HTML::Mason::Interp->new(
        comp_root     => [map {state $a = 1; [$a++ => "$_"]} $self->docroot],
        out_method    => \$outbuf,
        allow_globals => \@globals,
    );
    
    # set globals
    for my $var (keys %data){
        my $val  = $data{$var};
        $interp->set_global($var, $val);
    }
    
    $interp->exec("/$template");
    return $outbuf;
};

1;

__END__

=head1 NAME

App::TemplateServer::Provider::Mason - serve Mason templates with App::TemplateServer

=head1 SYNOPSIS

Use Mason templates with L<App::TemplateServer|App::TemplateServer>.

   template-server --provider Mason --docroot /mason/templates

See L<template-server> and <App::TemplateServer> for details.

=head1 AUTHOR AND COPYRIGHT

Jonathan Rockway C<< <jrockway@cpan.org> >>

This module is Free software, you may redistribute it under the same
terms as Perl itself.