[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