[Templates] LOAD_PERL bug?
Lyle Brooks
brooks@deseret.com
Sat, 11 Aug 2001 09:49:12 -0400
--fUYQa+Pmc3FrFX/N
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Ok, who the patch pumpkin?
I've worked on a patch for this LOAD_PERL bug. I'm not exactly sure
what the patch procedure is. Do we have one? Let me know if we do,
and I'll rework the format. Otherwise, attached is a tar.gz file
with two patch files, and a new Factory.pm file that goes in the
./lib/Template directory.
I tested and it seems to work, but of course the "mileage" is low
so your mileage may vary.
BTW, in the course of testing this patch, I ran across a configuration
option (PLUGIN_FACTORY) that I didn't see documented anywhere and only
used in two files (t/leak.t and lib/Template/Plugins.pm). I doubt that if
PLUGIN_FACTORY and LOAD_PERL were both enabled, you'd get the desired
behavior. But that's left as an exercise to the reader.
Quoting Lyle Brooks (brooks@deseret.com):
>
> ...or... have _load() return a newly created "Factory" object (we'd
> have to create such a class, because I don't think such a class currently
> exists within TT2) instead of a string. Then _load could set an attribute
> of the factory object.
>
> then factory->new() would do something like..
>
> sub new {
> my $self = shift;
>
> my $native_factory = $self->native();
>
> if ($self->is_plugin) {
> $native_factory->new($self->context, $self->args);
> }
> else {
> $native_factory->new($self->args);
> }
>
> }
>
>
>
> hmmm... even better yet.
>
> have _load() create and return a Factory object (which would be either a
> Factory::NonPlugin or a Factory::Plugin object (both of which would
> inherit from a common base Factory object)
>
> Define Factory::NonPlugin::new() like so...
>
> sub new {
> my $self = shift;
>
> my $native_factory = $self->native(); # the string currently returned
> # by _load()
> $native_factory->new($self->args);
> }
>
> and Factory::Plugin::new like so...
>
> sub new {
> my $self = shift;
>
> my $native_factory = $self->native(); # the string currently returned
> # by _load()
> $native_factory->new($self->context, $self->args);
> }
>
>
> then from fetch()
>
> $plugin = $factory->new(@$args);
>
>
> becomes
>
> $plugin = $factory->new(@$args);
>
>
> and everything is "self-aware"
>
>
> Quoting Craig Barratt (craig@arraycomm.com):
> > > While running ttree I've run into what appears to be a bug when
> > > using the LOAD_PERL option. I'm using v2.04
> >
> > This does appear to be a bug. Your analysis looks correct. Nice work!
> >
> > There are several possible fixes, but I'm not sure which is most
> > elegant.
> >
> > One way is to make _load return a flag that says whether it is a
> > plain perl module or not. fetch() could then save this flag in a
> > new hash (eg: $self->{ FACTORY_IS_PLAIN_MODULE }->{ $name }). Or,
> > based on the _load return flag, fetch() could save plain modules
> > in $self->{ FACTORY_PLAIN }->{ $name }, and normal modules in
> > $self->{ FACTORY }->{ $name }. In either case, shifting @args
> > should be removed from _load(), and fetch() only needs to
> > unshift $context onto @args for the case of a real plugin.
> >
> > Craig
>
> _______________________________________________
> templates mailing list
> templates@template-toolkit.org
> http://www.template-toolkit.org/mailman/listinfo/templates
--fUYQa+Pmc3FrFX/N
Content-Type: application/x-tar-gz
Content-Disposition: attachment; filename="Template.patch.tar.gz"
Content-Transfer-Encoding: base64
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
--fUYQa+Pmc3FrFX/N--