X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst.pm;h=310553b0e2b844d774eefd49f76afee8719d72b8;hp=62fc85b701fbe72d418969ca903052abeeb5d377;hb=d7eb055c8594ef25e6de4d351f92403da6267664;hpb=acca8cd512f838b4f863486de70d514ac0fae4bf diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 62fc85b..310553b 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -1,6 +1,7 @@ package Catalyst; use Moose; +use Moose::Meta::Class (); extends 'Catalyst::Component'; use Moose::Util qw/find_meta/; use bytes; @@ -75,7 +76,7 @@ __PACKAGE__->stats_class('Catalyst::Stats'); # Remember to update this in Catalyst::Runtime as well! -our $VERSION = '5.80003'; +our $VERSION = '5.80004'; { my $dev_version = $VERSION =~ /_\d{2}$/; @@ -1100,9 +1101,10 @@ EOF # modifiers work correctly in MyApp (as you have to call setup _before_ # applying modifiers). B::Hooks::EndOfScope::on_scope_end { + return if $@; my $meta = Class::MOP::get_metaclass_by_name($class); if ( $meta->is_immutable && ! { $meta->immutable_options }->{inline_constructor} ) { - die "You made your application class ($class) immutable, " + warn "You made your application class ($class) immutable, " . "but did not inline the constructor.\n" . "This will break catalyst, please pass " . "(replace_constructor => 1) when making your class immutable.\n"; @@ -2174,7 +2176,7 @@ sub setup_components { sub _controller_init_base_classes { my ($app_class, $component) = @_; foreach my $class ( reverse @{ mro::get_linear_isa($component) } ) { - Moose->init_meta( for_class => $class ) + Moose::Meta::Class->initialize( $class ) unless find_meta($class); } } @@ -2478,9 +2480,6 @@ the plugin name does not begin with C. my ( $proto, $plugin, $instant ) = @_; my $class = ref $proto || $proto; - # no ignore_loaded here, the plugin may already have been - # defined in memory and we don't want to error on "no file" if so - Class::MOP::load_class( $plugin ); $proto->_plugins->{$plugin} = 1; @@ -2501,14 +2500,27 @@ the plugin name does not begin with C. $class->_plugins( {} ) unless $class->_plugins; $plugins ||= []; - for my $plugin ( reverse @$plugins ) { - unless ( $plugin =~ s/\A\+// ) { - $plugin = "Catalyst::Plugin::$plugin"; - } + my @plugins = map { s/\A\+// ? $_ : "Catalyst::Plugin::$_" } @$plugins; + + Class::MOP::load_class($_) for @plugins; + + for my $plugin ( reverse @plugins ) { + my $meta = find_meta($plugin); + next if $meta && $meta->isa('Moose::Meta::Role'); $class->_register_plugin($plugin); } + + my @roles = + map { $_->name } + grep { $_ && blessed($_) && $_->isa('Moose::Meta::Role') } + map { find_meta($_) } + @plugins; + + Moose::Util::apply_all_roles( + $class => @roles + ) if @roles; } } @@ -2700,6 +2712,8 @@ dkubb: Dan Kubb Drew Taylor +dwc: Daniel Westermann-Clark + esskar: Sascha Kiefer fireartist: Carl Franks @@ -2748,6 +2762,8 @@ phaylon: Robert Sedlacek rafl: Florian Ragwitz +random: Roland Lammel + sky: Arthur Bergman the_jester: Jesse Sheidlower