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

cvs@template-toolkit.org cvs@template-toolkit.org
Wed, 01 Dec 2004 18:00:30 +0000


cvs         04/12/01 18:00:30

  Modified:    lib/Template/Resource Variable.pm
  Log:
  * fixed handling for root dotops
  
  Revision  Changes    Path
  1.6       +22 -16    TT3/lib/Template/Resource/Variable.pm
  
  Index: Variable.pm
  ===================================================================
  RCS file: /template-toolkit/TT3/lib/Template/Resource/Variable.pm,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Variable.pm	2004/11/29 11:39:42	1.5
  +++ Variable.pm	2004/12/01 18:00:29	1.6
  @@ -15,7 +15,7 @@
   #   modify it under the same terms as Perl itself.
   #
   # REVISION
  -#   $Id: Variable.pm,v 1.5 2004/11/29 11:39:42 abw Exp $
  +#   $Id: Variable.pm,v 1.6 2004/12/01 18:00:29 abw Exp $
   #
   #========================================================================
   
  @@ -27,7 +27,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     = 'variable';
  @@ -88,20 +88,26 @@
       # stashing it in the cache for next time.  if still undefined, 
       # give up and report the variable not found
   
  -    $root = $context->{ variable }->{ $name };
  -    $root = $context->{ variable }->{ $name } 
  -          = $context->find( variables => $name )
  -        unless defined $root;
  -
  -    return $self->not_found($name)
  -        unless defined $root;
  -
  -    # call any CODE reference 
  -    if (ref $root eq 'CODE') {
  -        $root = eval { $root->($args ? @$args : ()) };
  -        return $self->error($@) if $@;
  -        return $self->undefined($name)
  +    if (ref $name eq 'HASH') {
  +        $root = $name->{ root }
  +            || return $self->error('unexpected hash reference');
  +    }
  +    else {
  +        $root = $context->{ variable }->{ $name };
  +        $root = $context->{ variable }->{ $name } 
  +            = $context->find( variables => $name )
  +                unless defined $root;
  +
  +        return $self->not_found($name)
               unless defined $root;
  +
  +        # call any CODE reference 
  +        if (ref $root eq 'CODE') {
  +            $root = eval { $root->($args ? @$args : ()) };
  +            return $self->error($@) if $@;
  +            return $self->undefined($name)
  +                unless defined $root;
  +        }
       }
   
       # send value straight back if there are no more dotop nodes
  @@ -735,7 +741,7 @@
   
   =head1 VERSION
   
  -$Revision: 1.5 $
  +$Revision: 1.6 $
   
   =head1 COPYRIGHT