X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst.pm;h=46fc5223a89bf7fcb1c8a8d6af00f050313ce92c;hb=ff942beb0bff49b955364171d35961fa1b5aae93;hp=0e0130530177644755de3b04a4d9585a7780da4b;hpb=1a5adaee236dda2152a9d0fb1ca27d08f3f92777;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 0e01305..46fc522 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -32,9 +32,11 @@ use Catalyst::EngineLoader; use utf8; use Carp qw/croak carp shortmess/; use Try::Tiny; +use Safe::Isa; use Plack::Middleware::Conditional; use Plack::Middleware::ReverseProxy; use Plack::Middleware::IIS6ScriptNameFix; +use Plack::Middleware::IIS7KeepAliveFix; use Plack::Middleware::LighttpdScriptNameFix; BEGIN { require 5.008003; } @@ -49,20 +51,30 @@ has request => ( is => 'rw', default => sub { my $self = shift; - my %p = ( _log => $self->log ); - $p{_uploadtmp} = $self->_uploadtmp if $self->_has_uploadtmp; - $self->request_class->new(\%p); + $self->request_class->new($self->_build_request_constructor_args); }, lazy => 1, ); +sub _build_request_constructor_args { + my $self = shift; + my %p = ( _log => $self->log ); + $p{_uploadtmp} = $self->_uploadtmp if $self->_has_uploadtmp; + \%p; +} + has response => ( is => 'rw', default => sub { my $self = shift; - $self->response_class->new({ _log => $self->log }); + $self->response_class->new($self->_build_response_constructor_args); }, lazy => 1, ); +sub _build_response_constructor_args { + my $self = shift; + { _log => $self->log }; +} + has namespace => (is => 'rw'); sub depth { scalar @{ shift->stack || [] }; } @@ -99,7 +111,7 @@ __PACKAGE__->stats_class('Catalyst::Stats'); # Remember to update this in Catalyst::Runtime as well! -our $VERSION = '5.90015'; +our $VERSION = '5.90017'; sub import { my ( $class, @arguments ) = @_; @@ -152,7 +164,7 @@ sub MODIFY_CODE_ATTRIBUTES { sub _application { $_[0] } -=encoding utf8 +=encoding UTF-8 =head1 NAME @@ -1008,11 +1020,20 @@ EOF if ( $class->debug and - my $comps = $class->container->get_all_components($class) + my $comps = $class->container->get_all_component_services($class) ) { my $column_width = Catalyst::Utils::term_width() - 8 - 9; - my $t = Text::SimpleTable->new( [ $column_width, 'Class' ], [ 8, 'Type' ] ); - $t->row( $_ => ref($comps->{$_}) ? 'instance' : 'class' ) for keys %$comps; + my $t = Text::SimpleTable->new( [ $column_width, 'Class' ], [ 8, 'Lifecycle' ] ); + + # FIXME + # I don't really know what we're going to show here + while (my ($class, $info) = each %$comps) { + my $lifecycle = $info->{backcompat_service} + ? $info->{backcompat_service}->lifecycle + : $info->{service}->lifecycle + ; + $t->row( $class, $lifecycle ); + } $class->log->debug( "Loaded components:\n" . $t->draw . "\n" ); } @@ -1106,7 +1127,7 @@ path, use C<< $c->uri_for_action >> instead. sub uri_for { my ( $c, $path, @args ) = @_; - if (blessed($path) && $path->isa('Catalyst::Controller')) { + if ( $path->$_isa('Catalyst::Controller') ) { $path = $path->path_prefix; $path =~ s{/+\z}{}; $path .= '/'; @@ -1123,7 +1144,7 @@ sub uri_for { $arg =~ s/([^$URI::uric])/$URI::Escape::escapes{$1}/go; } - if ( blessed($path) ) { # action object + if ( $path->$_isa('Catalyst::Action') ) { # action object s|/|%2F|g for @args; my $captures = [ map { s|/|%2F|g; $_; } ( scalar @args && ref $args[0] eq 'ARRAY' @@ -1437,12 +1458,18 @@ Returns a hash of components. sub components { my ( $class, $comps ) = @_; + # FIXME + # this is very wrong # people create components calling this sub directly, before setup + # also, $class->log doesn't work before setup_log $class->setup_config unless $class->container; my $container = $class->container; if ( $comps ) { + $class->log->warn(q{You are adding components using Catalyst's components method.}); + $class->log->warn(q{This behaviour is deprecated, please read}); + $class->log->warn(q{Catalyst::IOC::Container's documentation for better ways to do that.}); $container->add_component( $_ ) for keys %$comps; } @@ -2580,6 +2607,16 @@ sub apply_default_middlewares { # IIS versions $psgi_app = Plack::Middleware::IIS6ScriptNameFix->wrap($psgi_app); + # And another IIS issue, this time with IIS7. + $psgi_app = Plack::Middleware::Conditional->wrap( + $psgi_app, + builder => sub { Plack::Middleware::IIS7KeepAliveFix->wrap($_[0]) }, + condition => sub { + my ($env) = @_; + return $env->{SERVER_SOFTWARE} && $env->{SERVER_SOFTWARE} =~ m!IIS/7\.[0-9]!; + }, + ); + return $psgi_app; }