package HTML::Template::Pro::WrapAssociate; use strict; use Carp; use vars qw($VERSION @ISA); sub _wrap { my ($class, $associate_object, $is_case_sensitive, $is_strict_compatibility) = @_; if (ref($associate_object) && UNIVERSAL::can($associate_object,'param')) { my %hash; if ($is_case_sensitive) { tie %hash, $class, $associate_object; } else { foreach my $key ($associate_object->param()) { $hash{lc($key)} = $associate_object->param($key); } } return \%hash; } elsif (!$is_strict_compatibility && UNIVERSAL::isa($associate_object,'HASH')) { if ($is_case_sensitive) { return $associate_object; } else { my %hash; foreach my $key (keys(%$associate_object)) { $hash{lc($key)} = $associate_object->{$key}; } return \%hash; } } else { Carp::croak "bad value for associate: HTML::Template::Pro->new called with associate option, containing object of type " . ref($associate_object) . " which lacks a param() method and does not look like a hash!"; } } sub param { my $this = shift; return ${$this}->param(@_); } sub TIEHASH { my ($class, $associate) = @_; my $self=[$associate,[]]; return bless $self, $class; }; sub FETCH { my ($this, $key) = @_; return ${$this}->param($key); } sub EXISTS { my ($this, $key) = @_; return defined(${$this}->param($key)); } sub FIRSTKEY{ my ($this) = @_; my @param=${$this}->param(); $this->[1]=\@param; return shift @{$this->[1]}; } sub NEXTKEY{ my ($this) = @_; return shift @{$this->[1]}; } sub STORE{} sub DELETE{} sub CLEAR{} sub SCALAR{} 1; __END__ #head1 NAME HTML::Template::Pro::WrapAssociate - internal wrapper for associated objects #head1 DESCRIPTION Original HTML::Template has an 'associate' option, that allows to specify an extra places whare to look for a variable value. They should have custom 'param' interface method, see L for details. This module wraps an object with custom 'param' interface method into a magic tied hash. Note that this module is for internal use only. #head1 AUTHOR I. Vlasenko, Eviy@altlinux.orgE #head1 COPYRIGHT AND LICENSE Copyright (C) 2005-2009 by I. Yu. Vlasenko. Pieces of code in Pro.pm and documentation of HTML::Template are copyright (C) 2000-2002 Sam Tregar (sam@tregar.com) The template syntax, interface conventions and a large piece of documentation of HTML::Template::AssociateProWrapper are based on CPAN module HTML::Template by Sam Tregar, sam@tregar.com. This library is free software; you can redistribute it and/or modify it under either the LGPL2+ or under the same terms as Perl itself, either Perl version 5.8.4 or, at your option, any later version of Perl 5 you may have available. #cut