NAME
    Catalyst::Plugin::C3 - Catalyst Plugin to subvert NEXT to use Class::C3

SYNOPSIS
    Use it in an application:

      package MyCatApp;
      use Catalyst qw/ -Debug C3 Static::Simple /;

    Use it in another plugin:

      package Catalyst::Plugin::FooBar;
      use base qw/ Catalyst::Plugin::C3 /;

DESCRIPTION
    *** WARNING *** THIS MODULE IS NOT FOR GENERAL PUBLIC CONSUMPTION JUST
    YET.

    This module is related to the possible transition of Catalyst from NEXT
    to Class::C3. This module is a developer release only, and is not
    intended for any sort of production use by anyone at this time. This
    module will be upgraded to 0.02 and released if/when it seems like a
    good idea for people other than Catalyst module developers to look at it
    and/or use it.

    This module makes the use of the following idiom:

      use NEXT;

      sub foo {
        my $self = shift->NEXT::foo(@_);
      }

    actually accomplish something more like:

      use Class::C3;

      sub foo {
        my $self = shift->next::method(@_);
      }

    It does this by essentially pre-pending some functionality to "AUTOLOAD"
    in NEXT which transforms the call into Class::C3's "next::method" call,
    but only when certain specific conditions are met.

    Those conditions are that the object "->NEXT" is being used on is a
    Catalyst-related object of some sort, and that the inheritance heirarchy
    of the object's class is C3-compatible.

    If either of those conditions do not hold true, the "->NEXT" call should
    do things the normal NEXT way.

    If you are going to place this module in your plugins list for a
    Catalyst app, it is best placed at the top of the list, above all other
    plugins. A good reason to stick this in your plugins list is that it can
    give a noticeable performance boost in the case that you're using lots
    of Plugins and other Catalyst components which still use NEXT rather
    than Class::C3.

    Some other plugins that have real end-user functionality may require
    this plugin as a base-class in order to transition themselves to
    Class::C3 without worrying about being broken by other plugins which
    haven't made the transition. Most plugins will *not* need to do so. Any
    that do would have wierd hacks involving "*{NEXT::NEXT}" in them prior
    to their C3 conversion, so you'd know it.

    Or in other words, a plugin should only base on this plugin if it needed
    NEXT hacks to work right under NEXT, and you're transitioning it to use
    Class::C3.

METHODS
  handle_request
    This plugin hooks into the "handle_request" method, sets up a "local"
    override of the standard version of "AUTOLOAD" in NEXT for the entire
    request, and then calls up the chain to the next class on the list.

AUTHOR
    Brandon Black "blblack@gmail.com"

COPYRIGHT
    This program is free software, you can redistribute it and/or modify it
    under the same terms as Perl itself.

