diff options
| author | Andreas Brachold <vdr07@deltab.de> | 2007-08-13 18:41:27 +0000 |
|---|---|---|
| committer | Andreas Brachold <vdr07@deltab.de> | 2007-08-13 18:41:27 +0000 |
| commit | bcbf441e09fb502cf64924ff2530fa144bdf52c5 (patch) | |
| tree | f377707a2dac078db8cd0c7d7abfe69ac1006d71 /lib/Template/Plugin/Procedural.pm | |
| download | xxv-bcbf441e09fb502cf64924ff2530fa144bdf52c5.tar.gz xxv-bcbf441e09fb502cf64924ff2530fa144bdf52c5.tar.bz2 | |
* Move files to trunk
Diffstat (limited to 'lib/Template/Plugin/Procedural.pm')
| -rw-r--r-- | lib/Template/Plugin/Procedural.pm | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/lib/Template/Plugin/Procedural.pm b/lib/Template/Plugin/Procedural.pm new file mode 100644 index 0000000..8601225 --- /dev/null +++ b/lib/Template/Plugin/Procedural.pm @@ -0,0 +1,170 @@ +#============================================================================== +# +# Template::Plugin::Procedural +# +# DESCRIPTION +# +# A Template Plugin to provide a Template Interface to Data::Dumper +# +# AUTHOR +# Mark Fowler <mark@twoshortplanks.com> +# +# COPYRIGHT +# +# Copyright (C) 2002 Mark Fowler. All Rights Reserved +# +# This module is free software; you can redistribute it and/or +# modify it under the same terms as Perl itself. +# +#------------------------------------------------------------------------------ +# +# $Id: Procedural.pm,v 1.11 2004/01/13 16:20:38 abw Exp $ +# +#============================================================================== + +package Template::Plugin::Procedural; + +require 5.004; + +use strict; + +use vars qw( $VERSION $DEBUG $AUTOLOAD ); +use base qw( Template::Plugin ); + +$VERSION = sprintf("%d.%02d", q$Revision: 1.11 $ =~ /(\d+)\.(\d+)/); +$DEBUG = 0 unless defined $DEBUG; + +#------------------------------------------------------------------------ +# load +#------------------------------------------------------------------------ + +sub load +{ + my ($class, $context) = @_; + + # create a proxy namespace that will be used for objects + my $proxy = "Template::Plugin::" . $class; + + # okay, in our proxy create the autoload routine that will + # call the right method in the real class + no strict "refs"; + *{ $proxy . "::AUTOLOAD" } = + sub + { + # work out what the method is called + $AUTOLOAD =~ s!^.*::!!; + + print STDERR "Calling '$AUTOLOAD' in '$class'\n" + if $DEBUG; + + # look up the sub for that method (but in a OO way) + my $uboat = $class->can($AUTOLOAD); + + # if it existed call it as a subroutine, not as a method + if ($uboat) + { + shift @_; + return $uboat->(@_); + } + + print STDERR "Eeek, no such method '$AUTOLOAD'\n" + if $DEBUG; + + return ""; + }; + + # create a simple new method that simply returns a blessed + # scalar as the object. + *{ $proxy . "::new" } = + sub + { + my $this; + return bless \$this, $_[0]; + }; + + return $proxy; +} + +1; + +__END__ + + +#------------------------------------------------------------------------ +# IMPORTANT NOTE +# This documentation is generated automatically from source +# templates. Any changes you make here may be lost. +# +# The 'docsrc' documentation source bundle is available for download +# from http://www.template-toolkit.org/docs.html and contains all +# the source templates, XML files, scripts, etc., from which the +# documentation for the Template Toolkit is built. +#------------------------------------------------------------------------ + +=head1 NAME + +Template::Plugin::Procedural - Base class for procedural plugins + +=head1 SYNOPSIS + + package Template::Plugin::LWPSimple; + use base qw(Template::Plugin::Procedural); + use LWP::Simple; # exports 'get' + 1; + + [% USE LWPSimple %] + [% LWPSimple.get("http://www.tt2.org/") %] + +=head1 DESCRIPTION + +B<Template::Plugin::Procedural> is a base class for Template Toolkit +plugins that causes defined subroutines to be called directly rather +than as a method. Essentially this means that subroutines will not +receive the class name or object as its first argument. + +This is most useful when creating plugins for modules that normally +work by exporting subroutines that do not expect such additional +arguments. + +Despite the fact that subroutines will not be called in an OO manner, +inheritance still function as normal. A class that uses +B<Template::Plugin::Procedural> can be subclassed and both subroutines +defined in the subclass and subroutines defined in the original class +will be available to the Template Toolkit and will be called without +the class/object argument. + +=head1 AUTHOR + +Mark Fowler E<lt>mark@twoshortplanks.comE<gt> + +L<http://www.twoshortplanks.com|http://www.twoshortplanks.com> + + + + +=head1 VERSION + +1.11, distributed as part of the +Template Toolkit version 2.13, released on 30 January 2004. + +=head1 COPYRIGHT + + +Copyright (C) 2002 Mark Fowler E<lt>mark@twoshortplanks.comE<gt> + +This module is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +=head1 SEE ALSO + +L<Template|Template>, L<Template::Plugin|Template::Plugin> + +=cut + +# Local Variables: +# mode: perl +# perl-indent-level: 4 +# indent-tabs-mode: nil +# End: +# +# vim: expandtab shiftwidth=4: |
