[Templates-cvs] cvs commit: TT3/lib/Template Factory.pm

cvs@template-toolkit.org cvs@template-toolkit.org
Sun, 12 Dec 2004 10:27:39 +0000


cvs         04/12/12 10:27:38

  Modified:    lib/Template Factory.pm
  Log:
  * added default option and default() method
  
  Revision  Changes    Path
  1.6       +45 -4     TT3/lib/Template/Factory.pm
  
  Index: Factory.pm
  ===================================================================
  RCS file: /template-toolkit/TT3/lib/Template/Factory.pm,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Factory.pm	2004/12/11 13:59:51	1.5
  +++ Factory.pm	2004/12/12 10:27:38	1.6
  @@ -18,7 +18,7 @@
   #   modify it under the same terms as Perl itself.
   #
   # REVISION
  -#   $Id: Factory.pm,v 1.5 2004/12/11 13:59:51 abw Exp $
  +#   $Id: Factory.pm,v 1.6 2004/12/12 10:27:38 abw Exp $
   #
   #========================================================================
   
  @@ -30,7 +30,7 @@
   use Template::Base;
   use base qw( Template::Base );
   
  -our $VERSION   = sprintf("%d.%02d", q$Revision: 1.5 $ =~ /(\d+)\.(\d+)/);
  +our $VERSION   = sprintf("%d.%02d", q$Revision: 1.6 $ =~ /(\d+)\.(\d+)/);
   our $DEBUG     = 0 unless defined $DEBUG;
   our $ERROR     = '';
   our $THROW     = 'factory';         # name used for throwing errors
  @@ -38,7 +38,8 @@
   our $UTILS     = 'Template::Utils';
   our $MODULES   = { } unless defined $MODULES; 
   our $LOADED    = { } unless defined $LOADED;
  -our $PATH      = [ ];                       
  +our $PATH      = [ ] unless defined $PATH;
  +our $DEFAULT   = ''  unless defined $DEFAULT;
   
   
   #------------------------------------------------------------------------
  @@ -78,6 +79,12 @@
           $self->debug("config: ", $self->dump_hash($config), "\n");
       }
   
  +    # default option can be set to provide default module name
  +    my $default = $config->{ default } 
  +        || $self->pkgvar( DEFAULT => $DEFAULT );
  +
  +    $self->default($default) if $default;
  +
       # extract any $config items into separate hash arrays, based on
       # the keys in $modules
       $self->{ config } = $UTILS->hash_extract($config, [ keys %$modules ]);
  @@ -103,6 +110,37 @@
   
   
   #------------------------------------------------------------------------
  +# default()
  +# default($name)
  +#
  +# Get or set the default module.
  +#------------------------------------------------------------------------
  +
  +sub default {
  +    my $self = shift;
  +
  +    if (@_) {
  +        my $name = shift;
  +        my $module;
  +
  +        # check it's a valid module name
  +        return $self->error("default not found in $self->{ name }: $name")
  +            unless ($module = $self->{ modules }->{ $name });
  +        $self->{ default } = $name;
  +        return $module
  +    }
  +    else {
  +        # return current default or decline when called without args
  +        my $default = ref $self 
  +            ? $self->{ default }                    # object method
  +            : $self->pkgvar( DEFAULT => $DEFAULT ); # class method
  +        return $default 
  +            || $self->decline("no default for $self->{ name }");
  +    }
  +}
  +
  +
  +#------------------------------------------------------------------------
   # module($name)
   #
   # Returns the name of the module associated with $name, loading it if 
  @@ -112,6 +150,9 @@
   sub module {
       my ($self, $name) = @_;
   
  +    $name ||= $self->{ default } 
  +        || return $self->error("no name or default defined for $self->{ name }");
  +
       $self->debug("module($name)\n") if $DEBUG;
   
       my $modules = $self->modules() || return;
  @@ -461,7 +502,7 @@
   
   =head1 VERSION
   
  -$Revision: 1.5 $
  +$Revision: 1.6 $
   
   =head1 COPYRIGHT