X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst.pm;h=0f70e5e082bc588d76e60d85cc1b07839aca3aee;hb=46d0346ddafe8e167c679cddef9834946598e689;hp=e22ff8167d90d72308021c7f0e2f2e21e77d93e3;hpb=f3414019f472b55682ef3af53f761b6db7955887;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index e22ff81..0f70e5e 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -1,6 +1,5 @@ package Catalyst; -use Class::C3; use Moose; extends 'Catalyst::Component'; use bytes; @@ -40,8 +39,6 @@ has request => (is => 'rw', default => sub { $_[0]->request_class->new({}) }, re has response => (is => 'rw', default => sub { $_[0]->response_class->new({}) }, required => 1, lazy => 1); has namespace => (is => 'rw'); -no Moose; - attributes->import( __PACKAGE__, \&namespace, 'lvalue' ); sub depth { scalar @{ shift->stack || [] }; } @@ -89,21 +86,17 @@ sub import { # callers @ISA. return unless $class eq 'Catalyst'; - my $caller = caller(0); + my $caller = caller(); + return if $caller eq 'main'; + my $meta = Moose::Meta::Class->initialize($caller); + #Moose->import({ into => $caller }); #do we want to do this? - #why does called have to ISA Catalyst and ISA Controller ? - #Convert test suite to not use the behavior where Myapp ISA Controller - # after that is done we can eliminate that little mess. unless ( $caller->isa('Catalyst') ) { - no strict 'refs'; - if( $caller->can('meta') ){ - my @superclasses = ($caller->meta->superclasses, $class, 'Catalyst::Controller'); - #my @superclasses = ($caller->meta->superclasses, $class); - $caller->meta->superclasses(@superclasses); - } else { - push @{"$caller\::ISA"}, $class, 'Catalyst::Controller'; - #push @{"$caller\::ISA"}, $class; - } + my @superclasses = ($meta->superclasses, $class, 'Catalyst::Controller'); + $meta->superclasses(@superclasses); + } + unless( $meta->has_method('meta') ){ + $meta->add_method(meta => sub { Moose::Meta::Class->initialize("${caller}") } ); } $caller->arguments( [@arguments] ); @@ -379,19 +372,20 @@ Catalyst). =cut -sub stash { +around stash => sub { + my $orig = shift; my $c = shift; + my $stash = $orig->($c); if (@_) { - my $stash = @_ > 1 ? {@_} : $_[0]; - croak('stash takes a hash or hashref') unless ref $stash; - foreach my $key ( keys %$stash ) { - #shouldn't we hold this in a var and save ourselves the subcall? - $c->next::method->{$key} = $stash->{$key}; + my $new_stash = @_ > 1 ? {@_} : $_[0]; + croak('stash takes a hash or hashref') unless ref $new_stash; + foreach my $key ( keys %$new_stash ) { + $stash->{$key} = $new_stash->{$key}; } } - return $c->next::method; -} + return $stash; +}; =head2 $c->error @@ -704,14 +698,15 @@ L. =cut -sub config { +around config => sub { + my $orig = shift; my $c = shift; $c->log->warn("Setting config after setup has been run is not a good idea.") if ( @_ and $c->setup_finished ); - $c->next::method(@_); -} + $c->$orig(@_); +}; =head2 $c->log @@ -817,7 +812,6 @@ Catalyst> line. sub setup { my ( $class, @arguments ) = @_; - $class->log->warn("Running setup twice is not a good idea.") if ( $class->setup_finished ); @@ -926,7 +920,9 @@ EOF } # Add our self to components, since we are also a component - $class->components->{$class} = $class; + if( $class->isa('Catalyst::Controller') ){ + $class->components->{$class} = $class; + } $class->setup_actions; @@ -1936,7 +1932,7 @@ sub setup_component { Catalyst::Exception->throw( message => qq/Couldn't instantiate component "$component", "COMPONENT() didn't return an object-like value"/ - ) unless eval { $instance->can( 'can' ) }; + ) unless blessed($instance); return $instance; } @@ -1988,10 +1984,7 @@ sub setup_engine { if ( $ENV{MOD_PERL} ) { # create the apache method - { - no strict 'refs'; - *{"$class\::apache"} = sub { shift->engine->apache }; - } + $class->meta->add_method('apache' => sub { shift->engine->apache }); my ( $software, $version ) = $ENV{MOD_PERL} =~ /^(\S+)\/(\d+(?:[\.\_]\d+)+)/; @@ -2126,9 +2119,7 @@ sub setup_log { my $env_debug = Catalyst::Utils::env_value( $class, 'DEBUG' ); if ( defined($env_debug) ? $env_debug : $debug ) { - no strict 'refs'; - #Moose todo: dying to be made a bool attribute - *{"$class\::debug"} = sub { 1 }; + $class->meta->add_method('debug' => sub { 1 }); $class->log->debug('Debug messages enabled'); } } @@ -2152,9 +2143,7 @@ sub setup_stats { my $env = Catalyst::Utils::env_value( $class, 'STATS' ); if ( defined($env) ? $env : ($stats || $class->debug ) ) { - no strict 'refs'; - #Moose todo: dying to be made a bool attribute - *{"$class\::use_stats"} = sub { 1 }; + $class->meta->add_method('use_stats' => sub { 1 }); $class->log->debug('Statistics enabled'); } } @@ -2458,4 +2447,8 @@ the same terms as Perl itself. =cut +no Moose; + +__PACKAGE__->meta->make_immutable; + 1;