package GOB::Template;
use strict;
use FileHandle;
use Text::ScriptTemplate;
=head1 Bee Templates
The perl-based templating system for use in Bee apps.
This is mostly a pass-through to Text::Template::Simple
The intent is to make our perl templates as similar to PHP as possible
* Delimiters: [* *code* *]
* Extend PHP: [*= $variable *]
* PHP echo:
Home
* PHP include (TODO: How doe
$ENV{GOB_ROOT}.'/lib/reporting_templates/pipeline_documentation.htt',
param => [$ph, $pfile],
outputfile => $dfile,
escmode => 0,
});
becomes roughly:
# Bee Template Engine
GOB::Template::exec(
$ENV{GOB_ROOT}.'/lib/reporting_templates/pipeline_documentation.htt',
[$ph, $pfile], # could be {ph => $ph, pfile => $pfile},
{
OUT_FILE_NAME => $dfile
});
=cut
sub exec{
my ($tfile, $tdata, $opts) = @_;
my $OUTFH = undef;
if($OUTFH = $opts->{OUT_FILE_HANDLE}){
}elsif($opts->{OUT_FILE_NAME}){
$OUTFH = FileHandle->new('> '.$opts->{OUT_FILE_NAME});
if(!$OUTFH){
die "Couldn't open output file: [".$opts->{OUT_FILE_NAME}."]";
}
}
#$Text::ScriptTemplate::DEBUG = 1; #$opts->{DEBUG};
my $tst = Text::ScriptTemplate->new();
$tst->load(
$tfile,
DELIM => [qw([* *])]
);
$tst->setq(
tdata => $tdata
);
# get our Expanded Template STRing
my $et_str = $tst->fill(
PACKAGE => new GOB::_TSpace(),
OHANDLE => $OUTFH,
);
# The `eval` used in the templating system doesn't pass along errors
if($@){
my $raw_code = $tst->{buff};
my $numberred_code = '';
my $lno = 0; # Line NOmber
foreach my $line (split(/\n/, $raw_code)){
$numberred_code .= $lno++ .$line."\n";
}
die "Template error: [$@] in [$tfile], code: [$numberred_code]";
}
return $et_str;
}
1;
#############################################################################
# This seems to be necessary-ish for Text::ScriptTemplate
##############################################################################
package GOB::_TSpace;
use Data::Dumper;
use warnings;
use strict;
use vars qw($tdata @tdata %tdata $_handle $_OBUFFER $_OHANDLE);
sub new { bless {}, shift }