[Catalyst] External plugins (continued)

Christopher H. Laco claco at chrislaco.com
Fri Feb 17 23:02:45 CET 2006


Brandon Black wrote:
> On 2/17/06, Christopher H. Laco <claco at chrislaco.com> wrote:
>> Ovid wrote:
>>> --- Matt S Trout <dbix-class at trout.me.uk> wrote:
>>>
>>>>>   use Catalyst qw(
>>>>>     DateTime
>>>>>     +MyApp::Custom::Plugin::DoesTheDishes
>>>>>   );
>>>>>
>>>> I dunno if people want to have a debate over exactly what name to
>>>> use, but I think in general this is a good idea.
>>> Unless I'm misunderstanding folks, this sounds like something they
>>> want.  I've noticed that in writing the tests, I've stumbled across the
>>> problem that plugins are computed, rather than determined.  For
>>> example, in one test we have this:
>>>
>>>   my $plugins = join(
>>>     ', ',
>>>      sort grep { m/^Catalyst::Plugin/ }
>>>      @{ $class . '::ISA' }
>>>   );
>>>   $c->response->header( 'X-Catalyst-Plugins' => $plugins );
>>>
>>> This makes it a bit harder for me to test.  I think providing a bit of
>>> introspection here would be useful so that we could do:
>>>
>>>   my @plugins = $c->plugins;
>>>
>>> In Catalyst::setup_plugins(), we see that this is a class method (which
>>> seems appropriate), so this could be easily implemented by a public
>>> "plugins()" method for reading and a protected "_set_plugin()" or
>>> something similar so that Catalyst can store this data.  Thus, your app
>>> can query itself to determine what plugins it supports (useful is a
>>> plugin wants to know if other plugins are available).
>>>
>>> The downside of this is that anyone who has already done the "use base"
>>> trick to add a plugin won't have this plugin name available from
>>> $c->plugins.  Of course, since they're not using that method, it may
>>> not be a problem.
>>>
>>> Does anyone have any problem with this approach?
>>>
>>> Cheers,
>>> Ovid
>>>
>> Ya know, I did a lot of plugin hokey pokey in Handel in terms of plugin
>> order, LoadPlugins (load only the specified ones), IgnorePlugins (load
>> all but the ones list), etc. It turns into a Charlie Foxtrot quite easily.
>>
>>
>> The more I think about this, the more I think that just sticking with
>> the DWIM version of:
>>
>> use Catalyst qw/Static Authentication +my::other::plugin,
>> +yet::some::other::ns/;
>>
>> is the best way to go.  The closer we move towards a Plugin directory,
>> the worse the needed options become.
>>
>> If there is a plugins directory, we then need the ability to specify
>> which plugins to load, or not load, and in what order, possibly using
>> the visitor model to register each one.
>>
>> Keeping things back to the use statement keeps it to a simple DWIM
>> without much more code. The order specified is the order loaded without
>> any extra magic like it is now. Anything not listed is not loaded
>> without any extra code.
>>
>> If any of that makes any sense...
>>
> 
> I agree, but I still think the Plugins directory is useful for
> organizational and shorthand.  Don't scan it and try to autoload
> anything, just make MyApp::Plugin an automatic plugin prefix like
> Catalyst::Plugin is.
> 
> Then we can do "use Catalyst qw/ StaticSimple DoTheDishes
> +Foo::Bar/;", and it will find Catalyst::Plugin::StaticSimple,
> MyApp::Plugin::DoTheDishes, and Foo::Bar.
> 
> -- Brandon
> 
> 

And is +Foo::Bar  really MyApp::Plugin::Foo::Bar?
What about the people who want +Foo::Bar to really load Foo::Bar ?

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 187 bytes
Desc: OpenPGP digital signature
Url : http://lists.rawmode.org/pipermail/catalyst/attachments/20060217/eafb0d86/signature.pgp


More information about the Catalyst mailing list