[Catalyst] setup() called twice
    Matt Lawrence 
    matt.lawrence at ymogen.net
       
    Tue Jun 19 18:19:30 GMT 2007
    
    
  
Matt S Trout wrote:
> On Tue, Jun 19, 2007 at 04:52:08PM +0100, Matt Lawrence wrote:
>   =
>> Matt S Trout wrote:
>>     =
>>> On Tue, Jun 19, 2007 at 09:50:30AM +0100, Matt Lawrence wrote:
>>>       =
>>>> What's wrong with:
>>>>
>>>> $_->setup for keys %{$self->_plugins};
>>>>     =
>>>>         =
>>> Setup order matters.
>>>
>>>   =
>>>       =
>> Fine, the order is known in setup(), but gets discarded.
>>
>> $class->setup_plugins($flags->{plugins});
>>
>> ...
>>
>> # Call plugins' setup
>> $_->setup for @{delete $flags->{plugins} || []};
>>     =
>
> Still completely broken.
>
> Read half a dozen plugins' setup methods and come back when you have a cl=
ue.
>
>   =
Nothing like a bit of random abuse to spark off a bit of development work...
This patch implements what I was driving at. All tests pass with =
Catalyst::Runtime 5.7007.
I didn't include a test for the case of overridden setup, but it should =
be fixed. Feel free to flame me if it's not.
Matt
-------------- next part --------------
--- Catalyst-Runtime-5.7007/lib/Catalyst.pm	2007-02-28 15:20:30.000000000 +=
0000
+++ Catalyst-Runtime-5.7007-plugin-patch/lib/Catalyst.pm	2007-06-19 18:08:1=
2.000000000 +0100
@@ -807,8 +807,11 @@
 =
     $class->setup_home( delete $flags->{home} );
 =
+    # We will need this later on..
+    my $plugins =3D delete $flags->{plugins};
+
     $class->setup_log( delete $flags->{log} );
-    $class->setup_plugins( delete $flags->{plugins} );
+    $class->setup_plugins( $plugins );
     $class->setup_dispatcher( delete $flags->{dispatcher} );
     $class->setup_engine( delete $flags->{engine} );
 =
@@ -860,10 +863,11 @@
     }
 =
     # Call plugins setup
-    {
-        no warnings qw/redefine/;
-        local *setup =3D sub { };
-        $class->setup;
+    for my $plugin (@{ $plugins || [] }) {
+        if (defined(my $setup =3D $plugin->can('setup'))) {
+            $setup->($class);
+            last;
+        }
     }
 =
     # Initialize our data structure
    
    
More information about the Catalyst
mailing list