[Templates-cvs] cvs commit: TT3/lib/Template/TT3 Generator.pm
cvs@template-toolkit.org
cvs@template-toolkit.org
Mon, 02 Feb 2004 10:01:58 +0000
cvs 04/02/02 10:01:57
Modified: lib/Template/TT3 Generator.pm
Log:
* added default option to provide default generator handler/method
Revision Changes Path
1.3 +21 -6 TT3/lib/Template/TT3/Generator.pm
Index: Generator.pm
===================================================================
RCS file: /template-toolkit/TT3/lib/Template/TT3/Generator.pm,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Generator.pm 2004/01/30 14:15:32 1.2
+++ Generator.pm 2004/02/02 10:01:57 1.3
@@ -17,7 +17,7 @@
# modify it under the same terms as Perl itself.
#
# REVISION
-# $Id: Generator.pm,v 1.2 2004/01/30 14:15:32 abw Exp $
+# $Id: Generator.pm,v 1.3 2004/02/02 10:01:57 abw Exp $
#
#========================================================================
@@ -26,12 +26,13 @@
use strict;
use warnings;
use Template::TT3::Base;
-use vars qw( $VERSION $DEBUG $ERROR $WARNING $GENERATORS );
+use vars qw( $VERSION $DEBUG $ERROR $WARNING $GENERATORS $DEFAULT );
use base qw( Template::TT3::Base );
-$VERSION = sprintf("%d.%02d", q$Revision: 1.2 $ =~ /(\d+)\.(\d+)/);
+$VERSION = sprintf("%d.%02d", q$Revision: 1.3 $ =~ /(\d+)\.(\d+)/);
$DEBUG = 0 unless defined $DEBUG;
$ERROR = '';
+$DEFAULT = '';
$GENERATORS = { };
@@ -42,6 +43,7 @@
my $cfggens = $config->{ generators } || { };
$self->{ generators } = { %$pkggens, %$cfggens };
+ $self->{ default } = $self->pkgvar( DEFAULT => $DEFAULT );
return $self;
}
@@ -65,9 +67,22 @@
elsif ($self->can($name)) {
return $self->$name(@args);
}
- else {
- return $self->error("unknown generator node type: $name");
+ elsif (my $default = $self->{ default }) {
+ if (UNIVERSAL::isa($default, 'CODE')) {
+ return eval {
+ &$handler($self, @args);
+ };
+ return $self->error($@) if $@;
+ return $self->error("most strange - eval didn't return or die");
+ }
+ elsif ($self->can($default)) {
+ return $self->$default($name, @args);
+ }
+ else {
+ return $self->error("default handler for generator is invalid: $default");
+ }
}
+ return $self->error("unknown generator node type: $name");
}
@@ -104,7 +119,7 @@
=head1 VERSION
-$Revision: 1.2 $
+$Revision: 1.3 $
=head1 COPYRIGHT