X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst.pm;h=8d59a4d1f1517096e437926a33c23e8f8bf3b96f;hp=34989bba2d23dbdad0b5d45fa5b6f756a4414966;hb=684d10edf63074f94667d437db01d30b8d13cefc;hpb=71f074a986d7497a2e04319bdc2ea1f0a57702df diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 34989bb..8d59a4d 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -16,11 +16,14 @@ use Path::Class; use Time::HiRes qw/gettimeofday tv_interval/; use URI; use Scalar::Util qw/weaken/; +use attributes; __PACKAGE__->mk_accessors( qw/counter depth request response state action namespace/ ); +attributes->import( __PACKAGE__, \&namespace, 'lvalue' ); + # Laziness++ *comp = \&component; *req = \&request; @@ -219,6 +222,23 @@ sub component { Returns a hashref containing your applications settings. +=cut + +=item $c->controller($name) + +Get a L instance by name. + + $c->controller('Foo')->do_stuff; + +=cut + +sub controller { + my ( $c, $name ) = @_; + my $controller = $c->comp("Controller::$name"); + return $controller if $controller; + return $c->comp("C::$name"); +} + =item debug Overload to enable debug messages. @@ -257,6 +277,21 @@ from the function. sub forward { my $c = shift; $c->dispatcher->forward( $c, @_ ) } +=item $c->model($name) + +Get a L instance by name. + + $c->model('Foo')->do_stuff; + +=cut + +sub model { + my ( $c, $name ) = @_; + my $model = $c->comp("Model::$name"); + return $model if $model; + return $c->comp("M::$name"); +} + =item $c->namespace Accessor to the namespace of the current action @@ -380,8 +415,11 @@ sub setup { $class->setup_components; if ( $class->debug ) { - my $t = Text::SimpleTable->new(76); - $t->row($_) for sort keys %{ $class->components }; + my $t = Text::SimpleTable->new( [ 37, 'Class' ], [ 36, 'Type' ] ); + for my $comp ( sort keys %{ $class->components } ) { + my $type = ref $class->components->{$comp} ? 'instance' : 'class'; + $t->row( $comp, $type ); + } $class->log->debug( "Loaded components:\n" . $t->draw ) if ( keys %{ $class->components } ); } @@ -557,6 +595,21 @@ sub stash { return $c->{stash}; } +=item $c->view($name) + +Get a L instance by name. + + $c->view('Foo')->do_stuff; + +=cut + +sub view { + my ( $c, $name ) = @_; + my $view = $c->comp("View::$name"); + return $view if $view; + return $c->comp("V::$name"); +} + =item $c->welcome_message Returns the Catalyst welcome HTML page. @@ -815,8 +868,6 @@ sub execute { chomp $error; $error = qq/Caught exception "$error"/; } - - $c->log->error($error); $c->error($error); $c->state(0); } @@ -833,6 +884,10 @@ Finalize request. sub finalize { my $c = shift; + for my $error ( @{ $c->error } ) { + $c->log->error($error); + } + $c->finalize_uploads; # Error @@ -939,7 +994,7 @@ Get an action in a given namespace. =cut -sub get_action { my $c = shift; $c->dispatcher->get_action( $c, @_ ) } +sub get_action { my $c = shift; $c->dispatcher->get_action(@_) } =item $c->get_actions( $action, $namespace ) @@ -1299,7 +1354,7 @@ sub setup_components { my $callback = sub { my ( $component, $context ) = @_; - unless ( $component->isa('Catalyst::Base') ) { + unless ( $component->isa('Catalyst::Component') ) { return $component; } @@ -1542,14 +1597,15 @@ sub setup_log { unless ( $class->log ) { $class->log( Catalyst::Log->new ); } - + my $app_flag = Catalyst::Utils::class2env($class) . '_DEBUG'; - warn "app: ".$app_flag; - if ( ( defined( $ENV{CATALYST_DEBUG} ) || - defined( $ENV{ $app_flag } ) ) ? - ( $ENV{CATALYST_DEBUG} || $ENV{ $app_flag } ) : - $debug ) { + if ( + ( defined( $ENV{CATALYST_DEBUG} ) || defined( $ENV{$app_flag} ) ) + ? ( $ENV{CATALYST_DEBUG} || $ENV{$app_flag} ) + : $debug + ) + { no strict 'refs'; *{"$class\::debug"} = sub { 1 }; $class->log->debug('Debug messages enabled'); @@ -1731,6 +1787,8 @@ Arthur Bergman Autrijus Tang +Brian Cassidy + Christian Hansen Christopher Hicks @@ -1765,6 +1823,8 @@ Robert Sedlacek Sam Vilain +Sascha Kiefer + Tatsuhiko Miyagawa Ulf Edvinsson