package SQL::Translator::Producer::TTSchema;
# -------------------------------------------------------------------
-# $Id: TTSchema.pm,v 1.9 2004-11-25 23:10:58 grommit Exp $
+# $Id: TTSchema.pm,v 1.10 2004-11-26 00:28:06 grommit Exp $
# -------------------------------------------------------------------
# Copyright (C) 2002-4 SQLFairy Authors
#
ttargs => {
author => "Mr Foo",
},
+
+ # Template config options
+ ttargs => {
+ INCLUDE_PATH => '/foo/templates',
+ },
},
);
print $translator->translate;
See F<t/data/template/basic.tt> for a more complete example.
The template will also get the set of extra variables given as a hashref via the
-C<ttvars> producer arg.
+C<tt_vars> producer arg.
You can set any of the options used to initiallize the Template object by
-adding them to your producer_args. See Template Toolkit docs for details of
+adding a tt_conf producer_arg. See Template Toolkit docs for details of
the options.
+(Note that the old style of passing this config directly in the producer args
+has been deprecated).
+
$translator = SQL::Translator->new(
to => 'TT',
producer_args => {
ttfile => 'foo_template.tt',
ttargs => {},
- INCLUDE_PATH => '/foo/templates/tt',
- INTERPOLATE => 1,
+ tt_conf = {
+ INCLUDE_PATH => '/foo/templates/tt',
+ INTERPOLATE => 1,
+ }
},
);
The template file to generate the output with.
-=item ttvars
+=item tt_vars
A hash ref of extra variables you want to add to the template.
+=item tt_conf
+
+A hash ref of configuration options to pass to the L<Template> object's
+constructor.
+
=back
=cut
use strict;
use vars qw[ $DEBUG $VERSION @EXPORT_OK ];
-$VERSION = sprintf "%d.%02d", q$Revision: 1.9 $ =~ /(\d+)\.(\d+)/;
+$VERSION = sprintf "%d.%02d", q$Revision: 1.10 $ =~ /(\d+)\.(\d+)/;
$DEBUG = 0 unless defined $DEBUG;
use Template;
my $scma = $translator->schema;
my $args = $translator->producer_args;
my $file = delete $args->{'ttfile'} or die "No template file!";
+
+ my $tt_vars = delete $args->{'tt_vars'} || {};
if ( exists $args->{ttargs} ) {
warn "Use of 'ttargs' producer arg is deprecated."
." Please use 'tt_vars' instead.\n";
- $args->{tt_vars} = delete $args->{ttargs};
+ %$tt_vars = { %{$args->{ttargs}}, %$tt_vars };
+ }
+
+ my %tt_conf = exists $args->{tt_conf} ? %{$args->{tt_conf}} : ();
+ # sqlt passes the producer args for _all_ producers in, so we use this
+ # grep hack to test for the old usage.
+ if ( grep /^[A-Z_]+$/, keys %$args ) {
+ warn "Template config directly in the producer args is deprecated."
+ ." Please use 'tt_conf' instead.\n";
+ %tt_conf = ( %tt_conf, %$args );
}
- my $ttvars = delete $args->{'tt_vars'} || {};
- # Any args left here get given to the Template object.
debug "Processing template $file\n";
my $out;
DEBUG => $DEBUG,
ABSOLUTE => 1, # Set so we can use from the command line sensibly
RELATIVE => 1, # Maybe the cmd line code should set it! Security!
- %$args, # Allow any TT opts to be passed in the producer_args
+ %tt_conf,
) || die "Failed to initialize Template object: ".Template->error;
$tt->process(
$file,
- { schema => $scma , %$ttvars },
+ { schema => $scma , %$tt_vars },
\$out
) or die "Error processing template '$file': ".$tt->error;
use Test::SQL::Translator qw(maybe_plan);
use Data::Dumper;
-use vars '%opt';
-BEGIN { map { $opt{$_}=1 if s/^-// } @ARGV; }
-use constant DEBUG => (exists $opt{d} ? 1 : 0);
-
use FindBin qw/$Bin/;
# Testing 1,2,3,4...
#=============================================================================
BEGIN {
- maybe_plan(3,
+ maybe_plan(6,
'XML::XPath',
'SQL::Translator::Parser::XML::SQLFairy',
'Template',
use SQL::Translator;
use SQL::Translator::Producer::TTSchema;
-# Parse the test XML schema
-my $obj;
-$obj = SQL::Translator->new(
- debug => DEBUG, #$opt{d},
- show_warnings => 1,
- add_drop_table => 1,
- from => "XML-SQLFairy",
- filename => "$Bin/data/xml/schema.xml",
- to => "TTSchema",
- producer_args => {
- ttfile => "$Bin/data/template/basic.tt",
- tt_vars => {
- foo => 'bar',
- hello => 'world',
+# Main test. Template whole schema and test tt_vars
+{
+ my $obj;
+ $obj = SQL::Translator->new(
+ show_warnings => 1,
+ from => "XML-SQLFairy",
+ filename => "$Bin/data/xml/schema.xml",
+ to => "TTSchema",
+ producer_args => {
+ ttfile => "$Bin/data/template/basic.tt",
+ tt_vars => {
+ foo => 'bar',
+ hello => 'world',
+ },
},
- },
-);
-my $out;
-lives_ok { $out = $obj->translate; } "Translate ran";
-ok $out ne "" ,"Produced something!";
-local $/ = undef; # slurp
-eq_or_diff $out, <DATA> ,"Output looks right";
+ );
+ my $out;
+ lives_ok { $out = $obj->translate; } "Translate ran";
+ ok $out ne "" ,"Produced something!";
+ local $/ = undef; # slurp
+ eq_or_diff $out, <DATA> ,"Output looks right";
+}
+
+# Test passing of Template config
+{
+ my $tmpl = q{
+ [%- FOREACH table = schema.get_tables %]
+ Table: $table
+ [%- END %]};
+ my $obj;
+ $obj = SQL::Translator->new(
+ show_warnings => 1,
+ from => "XML-SQLFairy",
+ filename => "$Bin/data/xml/schema.xml",
+ to => "TTSchema",
+ producer_args => {
+ ttfile => \$tmpl,
+ tt_conf => {
+ INTERPOLATE => 1,
+ },
+ tt_vars => {
+ foo => 'bar',
+ hello => 'world',
+ },
+ },
+ );
+ my $out;
+ lives_ok { $out = $obj->translate; } "Translate ran";
+ ok $out ne "" ,"Produced something!";
+ local $/ = undef; # slurp
+ eq_or_diff $out, q{
+ Table: Basic}
+ ,"Output looks right";
+}
-print $out if DEBUG;
-#print "Debug:", Dumper($obj) if DEBUG;
__DATA__
Schema: