From: Tomas Doran Date: Sat, 13 Dec 2008 11:35:03 +0000 (+0000) Subject: Fix the manual to encourage you to use MRO::Compat, rather than Class::C3 directly X-Git-Tag: v5.8005~245 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Manual.git;a=commitdiff_plain;h=20a4dd982ca1bf65d8ec9b197de411b8f97ae45d Fix the manual to encourage you to use MRO::Compat, rather than Class::C3 directly --- diff --git a/Changes b/Changes index 7a75e03..b1e6ae3 100644 --- a/Changes +++ b/Changes @@ -1,5 +1,9 @@ Revision history for Catalyst-Manual + - Change use of Class::C3 to MRO::Compat, as rafl tells me + this is best practice, and gives you native next::method in + 5.10. (t0m) + 5.7014 04 Nov 2008 - Remove a reference to a FOREACH loop that did not exist (RT #39046) - Changed some Template Toolkit links to perldoc links (RT #38354) diff --git a/lib/Catalyst/Manual/ExtendingCatalyst.pod b/lib/Catalyst/Manual/ExtendingCatalyst.pod index 7a65b08..fd3ddf5 100644 --- a/lib/Catalyst/Manual/ExtendingCatalyst.pod +++ b/lib/Catalyst/Manual/ExtendingCatalyst.pod @@ -110,8 +110,8 @@ L. While Catalyst itself is still based on L (for multiple inheritance), extension developers are encouraged to use L, -which is what Catalyst will be switching to in some point in the -future. +via MRO::Compat, which is what Catalyst will be switching to in the +5.80 release. When overriding a method, keep in mind that some day additionally arguments may be provided to the method, if the last parameter is not @@ -119,7 +119,7 @@ a flat list. It is thus better to override a method by shifting the invocant off of C<@_> and assign the rest of the used arguments, so you can pass your complete arguments to the original method via C<@_>: - use Class::C3; ... + use MRO::Compat; ... sub foo { my $self = shift; my ($bar, $baz) = @_; # ... return @@ -277,9 +277,11 @@ method. The execute method of the action will naturally call the methods code. You can surround this by overriding the method in a subclass: - package Catalyst::Action::MyFoo; use strict; + package Catalyst::Action::MyFoo; + use strict; - use Class::C3; use base 'Catalyst::Action'; + use MRO::Compat; + use base 'Catalyst::Action'; sub execute { my $self = shift; @@ -291,8 +293,10 @@ subclass: } 1; -We are using L to re-dispatch to the original C method -in the L class. +We are using L to ensure that you have the next::method +call, from L (in older perls), or natively (if you are using +perl 5.10) to re-dispatch to the original C method in the +L class. The Catalyst dispatcher handles an incoming request and, depending upon the dispatch type, will call the appropriate target or chain. @@ -306,7 +310,7 @@ Mondays: package Catalyst::Action::OnlyMondays; use strict; - use Class::C3; + use MRO::Compat; use base 'Catalyst::Action'; sub match { @@ -548,7 +552,7 @@ implementation (excuse the lame class name, it's just an example): package Catalyst::Plugin::UriforUndefWarning; use strict; - use Class::C3; + use MRO::Compat; sub uri_for { my $c = shift; @@ -573,8 +577,9 @@ Curation with the application wide overrides and call the class' C method to return the component object. You can override this method and do and return whatever you want. -However, you should use L to forward to the original -C method to merge the configuration of your component. +However, you should use L (via L) to forward +to the original C method to merge the configuration of +your component. Here is a stub C method: @@ -582,7 +587,7 @@ Here is a stub C method: use strict; use base 'Catalyst::Component'; - use Class::C3; + use MRO::Compat; sub COMPONENT { my $class = shift;