[Omaha.pm] Template Toolkit MACRO

Jay Hannah jay at jays.net
Tue Dec 13 20:29:59 PST 2005


Hey Dave --

I'm hoping you can help me with an apparent MACRO problem in the Perl Mongers bin/build script.

When I run the script, it runs for all source files creating all the destination files, but then this source:

Select a continent:
[% link_to("/groups/africa.html", "Africa") %],
[% link_to("/groups/asia.html", "Asia") %],
[% link_to("/groups/central_america.html", "Central America") %],
[% link_to("/groups/europe.html", "Europe") %],
[% link_to("/groups/non_geographical.html", "Non-geographical") %],
[% link_to("/groups/north_america.html", "North America") %],
[% link_to("/groups/oceania.html", "Oceania") %],
[% link_to("/groups/south_america.html", "South America") %].

Turns into this output:

Select a continent:
, , , , , , , .

So it looks like TT is not finding link_to(). link_to() lives in lib/layout like so:

[% MACRO link_to(url, text) BLOCK %]
<a href="[% PROCESS relative %]">[% text %]</a>
[% END %]

and the bin/build script below uses INCLUDE_PATH 'lib', and the source file in question starts with

[% WRAPPER layout title = "Perl Mongers: User groups" %]

So shouldn't link_to() work and kick out URLs? It concerns me that when I rename the link_to() to anything else, TT still doesn't complain...

How do I debug this thing? DEBUG_ALL => 1 in the Template->new() call doesn't seem to do anything...

I'm not used to TT macros...

Thanks,

j
 


bin/build:
--------------------------
#!/usr/bin/perl -w

use strict;
use File::Copy;
use File::Find::Rule;
use File::Path;
use File::Spec::Functions qw(splitpath);
use Template;

my $tt = Template->new({
  POST_CHOMP => 1,
  PRE_CHOMP => 1,
  TRIM => 1,
  EVAL_PERL => 1 ,
  INCLUDE_PATH => ['.', 'lib', 'src'],
});

my $source = 'src';
my $destination = 'www';
my $parms;

my $rule = File::Find::Rule->new;
$rule->or(
  $rule->new->directory->name('.svn')->prune->discard,
  $rule->new
);
my @files = $rule->file()->name(qr/^.[^~]+$/)->in($source);

foreach my $file (@files) {
print STDERR $file, "\n";
  my $destfile = $file;
  $destfile =~ s/^$source/$destination/;
  my($volume, $directories, $filepart) = splitpath($destfile);
  mkpath $directories;
  warn "$file -> $destfile\n";

  if ($file =~ /\.png$/) {
    copy($file, $destfile);
  } else {
    $tt->process($file, $parms, $destfile) || die $tt->error;
  }
}


More information about the Omaha-pm mailing list