package Catalyst::Component;
use Moose;
+use Class::MOP;
use MooseX::Adopt::Class::Accessor::Fast;
use Catalyst::Utils;
+use MRO::Compat;
+use mro 'c3';
with 'MooseX::Emulate::Class::Accessor::Fast';
with 'Catalyst::ClassData';
# Temporary fix, some components does not pass context to constructor
my $arguments = ( ref( $_[-1] ) eq 'HASH' ) ? $_[-1] : {};
+ if( my $next = $self->next::can ){
+ my $class = blessed $self || $self;
+ my ($next_package) = Class::MOP::get_code_info($next);
+ warn "There is a COMPONENT method resolving after Catalyst::Component in ${next_package}. This behavior is deprecated and will stop working in future releases.";
+ return $next->($self, $arguments);
+ }
return $self->new($c, $arguments);
}
--- /dev/null
+use Test::More tests => 2;
+use strict;
+use warnings;
+
+{
+ package MyApp::Component;
+ use Test::More;
+
+ sub COMPONENT{
+ my $caller = caller;
+ is($caller, 'Catalyst::Component', 'Correct method resolution');
+ }
+
+ package MyApp::MyComponent;
+
+ use base 'Catalyst::Component', 'MyApp::Component';
+
+}
+
+{
+ my $expects = qr/after Catalyst::Component in MyApp::Component/;
+ local $SIG{__WARN__} = sub {
+ like($_[0], $expects, 'correct warning thrown');
+ };
+ MyApp::MyComponent->COMPONENT('MyApp');
+}