]> git.decadent.org.uk Git - maypole.git/commitdiff
+ TT2 objects used in M::V::TT are configurable with
authorSimon Cozens <simon@simon-cozens.org>
Sun, 19 Dec 2004 19:14:11 +0000 (19:14 +0000)
committerSimon Cozens <simon@simon-cozens.org>
Sun, 19 Dec 2004 19:14:11 +0000 (19:14 +0000)
  Maypole::Config->view_options
+ M::V::TT should perform better since it can reuse TT2 objects and sets
  COMPILE_DIR
+ Fix unit test output, use environment variable to control BeerDB::debug

git-svn-id: http://svn.maypole.perl.org/Maypole/trunk@316 48953598-375a-da11-a14b-00016c27c3ee

Changes
ex/BeerDB.pm
lib/Maypole/CLI.pm
lib/Maypole/Config.pm
lib/Maypole/View/TT.pm

diff --git a/Changes b/Changes
index d0280c96bd14718f9df8df2bc64d7967da7a106e..a17a4c589c9c9003e7aa77115a823b7a9cbf5dbe 100644 (file)
--- a/Changes
+++ b/Changes
@@ -24,6 +24,7 @@ Revision history for Perl extension Maypole
       application (instead of the current workaround for multiple apps under
       mod_perl)
     - classmetadata template variables can now be overriden individually
+    - Template toolkit objects are configured with Maypole::Config->view_options
 
 
 2.04  Tue Oct 27 14:00:00 2004
index 64f69541ba97aa4cf398a664dd0f438b1c5eb2b6..1e84b36147f4b5f5e7ad2192220435f5d94296e5 100644 (file)
@@ -1,7 +1,9 @@
 package BeerDB;
-use Maypole::Application qw/-Debug/;
+use Maypole::Application;
 use Class::DBI::Loader::Relationship;
 
+sub debug { $ENV{BEERDB_DEBUG} }
+
 BEGIN {
 # This is the sample application. Change this to the path to your
 # database. (or use mysql or something)
index 504d0b428a18596aa373a66d4643f7bbe207814b..81a2fd5083b2e2d4d10908895ae1ad7fa8af04fa 100644 (file)
@@ -31,7 +31,6 @@ sub parse_location {
     my $url  = URI->new( shift @ARGV );
     my $root = URI->new( $self->config->uri_base )->path;
     $self->{path} = $url->path;
-    $self->{path} .= '/' if $self->{path} eq $root;
     $self->{path} =~ s/^$root//i if $root;
     $self->parse_path;
     $self->parse_args($url);
index 6a236c829c8ecf950651cb2ed725472757264125..024b78cf727899949d05dc1d5f7ee8beede96bd9 100644 (file)
@@ -9,8 +9,8 @@ our $VERSION = "1." . sprintf "%04d", q$Rev$ =~ /: (\d+)/;
 
 # Public accessors.
 __PACKAGE__->mk_accessors(
-    qw( view uri_base template_root model loader display_tables ok_tables
-      rows_per_page dsn user pass opts application_name)
+     qw( view view_options uri_base template_root model loader display_tables
+         ok_tables rows_per_page dsn user pass opts application_name)
 );
 
 # Should only be modified by model.
@@ -57,6 +57,11 @@ makes URLs.
 The name of the view class for your Maypole Application. Defaults to
 "Maypole::View::TT".
 
+=head3 view_options
+
+A hash of configuration options for the view class. Consult the documentation
+for your chosen view class for information on available configuration options.
+
 =head2 Model-Related
 
 =head3 classes
index 21e2485b794a7d3a3fe6f5b694b4aa58a7b1de14..042a1b5824da5e0cd16921c6da0920fa9386d78b 100644 (file)
@@ -2,17 +2,31 @@ package Maypole::View::TT;
 use base 'Maypole::View::Base';
 use Maypole::Constants;
 use Template;
+use File::Spec::Functions qw(catdir tmpdir);
+
+use strict;
+our $VERSION = "1." . sprintf "%04d", q$Rev$ =~ /: (\d+)/;
 
 sub template {
     my ( $self, $r ) = @_;
-    my $template = Template->new( { INCLUDE_PATH => [ $self->paths($r) ] } );
+
+    my $view_options = $r->config->view_options || {};
+    $self->{provider} ||= Template::Provider->new();
+    $self->{tt}       ||= Template->new({
+        COMPILE_DIR    => catdir(tmpdir(), $r->config->application_name),
+        %$view_options,
+        LOAD_TEMPLATES => [ $self->{provider} ],
+    });
+
+    $self->{provider}->include_path([ $self->paths($r) ]);
+
     my $output;
-    if ( $template->process( $r->template, { $self->vars($r) }, \$output ) ) {
+    if ($self->{tt}->process( $r->template, { $self->vars($r) }, \$output )) {
         $r->{output} = $output;
         return OK;
     }
     else {
-        $r->{error} = $template->error;
+        $r->{error} = $self->{tt}->error;
         return ERROR;
     }
 }
@@ -27,6 +41,12 @@ Maypole::View::TT - A Template Toolkit view class for Maypole
 
     BeerDB->config->view("Maypole::View::TT"); # The default anyway
 
+    # Set some Template Toolkit options
+    BeerDB->config->view_options( {
+        TRIM        => 1,
+        COMPILE_DIR => '/var/tmp/mysite/templates',
+    } );
+
 =head1 DESCRIPTION
 
 This is the default view class for Maypole; it uses the Template Toolkit
@@ -35,11 +55,13 @@ Please see the Maypole manual, and in particular, the C<View> chapter,
 for the template variables available and for a refresher on how template
 components are resolved.
 
+The underlying Template toolkit object is configured through
+C<$r-E<gt>config-E<gt>view_options>. See L<Template> for available options.
+
 =over 4
 
 =item template
 
-
 Processes the template and sets the output. See L<Maypole::View::Base>
 
 =back