summaryrefslogtreecommitdiff
path: root/lib/Template/Plugin/Procedural.pm
diff options
context:
space:
mode:
authorAndreas Brachold <vdr07@deltab.de>2007-08-13 18:41:27 +0000
committerAndreas Brachold <vdr07@deltab.de>2007-08-13 18:41:27 +0000
commitbcbf441e09fb502cf64924ff2530fa144bdf52c5 (patch)
treef377707a2dac078db8cd0c7d7abfe69ac1006d71 /lib/Template/Plugin/Procedural.pm
downloadxxv-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.pm170
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: