From: Tomas Doran Date: Thu, 20 May 2010 20:34:34 +0000 (+0000) Subject: Changelog and dep bump for more_metaclass_compat branch merge X-Git-Tag: 5.80025~2^2~12 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=e9ba5c119a81f59f8339cd5c749709f5bc56b6d6 Changelog and dep bump for more_metaclass_compat branch merge --- diff --git a/Changes b/Changes index fe66038..461e653 100644 --- a/Changes +++ b/Changes @@ -1,5 +1,11 @@ # This file documents the revision history for Perl extension Catalyst. + Refactoring: + - Remove nasty hacks to make classes which are plain old perl work with + multiple levels away inherited from Moose classes which do metaclass roles. + This issue has been (more correcly) solved in core Moose instead of our + workaround. + 5.80024 2010-05-15 11:55:44 Bug fixes: diff --git a/Makefile.PL b/Makefile.PL index 3b2305c..8bdcd4b 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -19,7 +19,7 @@ requires 'namespace::clean' => '0.13'; requires 'B::Hooks::EndOfScope' => '0.08'; requires 'MooseX::Emulate::Class::Accessor::Fast' => '0.00903'; requires 'Class::MOP' => '0.95'; -requires 'Moose' => '1.03'; +requires 'Moose' => '1.05'; requires 'MooseX::MethodAttributes::Inheritable' => '0.19'; requires 'MooseX::Role::WithOverloading' => '0.05'; requires 'Carp'; diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 26b7649..1c96763 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -77,8 +77,17 @@ __PACKAGE__->request_class('Catalyst::Request'); __PACKAGE__->response_class('Catalyst::Response'); __PACKAGE__->stats_class('Catalyst::Stats'); -# Remember to update this in Catalyst::Runtime as well! +# This is here as but we need to be able to call# C::C->action_class, which +# calls the ->_action_class attribute's accessor to get the default action +# class for this controller. As the app class is also a controller (eww, warns) +# but we don't have an instance (just the component name) in the registery, +# we override _action_class here so that $class->_action_class doesn't explode +# (so it becomes class data rather than instance data for this one special case). +# This is a gross back compat hack which can go away for app/ctx split. +__PACKAGE__->mk_classdata(qw/ _action_class /); +__PACKAGE__->_action_class('Catalyst::Action'); +# Remember to update this in Catalyst::Runtime as well! our $VERSION = '5.80024'; sub import { @@ -1154,7 +1163,7 @@ EOF # Add our self to components, since we are also a component if( $class->isa('Catalyst::Controller') ){ - $class->components->{$class} = $class; + $class->components->{$class} = $class; # HATEFUL SPECIAL CASE } $class->setup_actions; @@ -1757,7 +1766,7 @@ sub finalize { $c->log_response; if ($c->use_stats) { - my $elapsed = sprintf '%f', $c->stats->elapsed; + my $elapsed = $c->stats->elapsed; my $av = $elapsed == 0 ? '??' : sprintf '%.3f', 1 / $elapsed; $c->log->info( "Request took ${elapsed}s ($av/s)\n" . $c->stats->report . "\n" ); diff --git a/lib/Catalyst/Controller.pm b/lib/Catalyst/Controller.pm index fbc8768..49591d3 100644 --- a/lib/Catalyst/Controller.pm +++ b/lib/Catalyst/Controller.pm @@ -71,11 +71,14 @@ for more info about how Catalyst dispatches to actions. #I think both of these could be attributes. doesn't really seem like they need #to ble class data. i think that attributes +default would work just fine -__PACKAGE__->mk_classdata($_) for qw/_dispatch_steps _action_class/; +__PACKAGE__->mk_classdata($_) for qw/_dispatch_steps/; __PACKAGE__->_dispatch_steps( [qw/_BEGIN _AUTO _ACTION/] ); -__PACKAGE__->_action_class('Catalyst::Action'); +has _action_class => ( + is => 'rw', + default => 'Catalyst::Action', +); sub _DISPATCH : Private { my ( $self, $c ) = @_; @@ -248,14 +251,21 @@ sub register_action_methods { } } -sub create_action { - my $self = shift; - my %args = @_; +sub action_class { + my ($self, %args) = @_; my $class = (exists $args{attributes}{ActionClass} ? $args{attributes}{ActionClass}[0] : $self->_action_class); Class::MOP::load_class($class); + return $class; +} + +sub create_action { + my $self = shift; + my %args = @_; + + my $class = $self->action_class(%args); my $action_args = $self->config->{action_args}; my %extra_args = (