X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FBase.pm;h=dd09c8b2ec28208304f2ea40f0bd4891083f8689;hb=908e3d9e7a61974b3807b7ab37862550452b2456;hp=65f3120e4864da536822d3745875d771c9202287;hpb=c5b74a51e7fa915f628392c1c55cb2d4a3e89d07;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Base.pm b/lib/Catalyst/Base.pm index 65f3120..dd09c8b 100644 --- a/lib/Catalyst/Base.pm +++ b/lib/Catalyst/Base.pm @@ -13,6 +13,11 @@ __PACKAGE__->mk_classdata($_) for qw/_dispatch_steps _action_class/; __PACKAGE__->_dispatch_steps( [qw/_BEGIN _AUTO _ACTION/] ); __PACKAGE__->_action_class('Catalyst::Action'); +__PACKAGE__->mk_accessors( qw/_application/ ); + +### _app as alias +*_app = *_application; + sub _DISPATCH : Private { my ( $self, $c ) = @_; @@ -61,11 +66,11 @@ sub _END : Private { } sub new { - my $self = shift; - my $app = $_[0]; - my $new = $self->NEXT::new(@_); - $new->{application} = $app; - return $new; + my $self = shift; + my $app = $_[0]; + my $new = $self->NEXT::new(@_); + $new->_application( $app ); + return $new; } =head1 NAME @@ -80,11 +85,18 @@ See L Catalyst Base Class -This is the base class for all Catalyst components. It also handles -dispatch of actions for controllers. +This is the base class for all Catalyst components. It is a subclass +of L which is the universal base class for +catalyst components. This module includes handling of dispatching for +controller actions. =head1 METHODS +=head2 $class->new($app, @args) + +Proxies through to NEXT::new and stashes the application instance as +$self->_application. + =head2 $self->action_for('name') Returns the Catalyst::Action object (if any) for a given method name in @@ -94,7 +106,7 @@ this component. sub action_for { my ( $self, $name ) = @_; - my $app = ($self->isa('Catalyst') ? $self : $self->{application}); + my $app = ($self->isa('Catalyst') ? $self : $self->_application); return $app->dispatcher->get_action($name, $self->action_namespace); } @@ -109,7 +121,7 @@ from the controller name (for e.g. MyApp::Controller::Foo::Bar becomes sub action_namespace { my ( $self, $c ) = @_; unless ( $c ) { - $c = ($self->isa('Catalyst') ? $self : $self->{application}); + $c = ($self->isa('Catalyst') ? $self : $self->_application); } my $hash = (ref $self ? $self : $self->config); # hate app-is-class return $hash->{namespace} if exists $hash->{namespace}; @@ -129,7 +141,7 @@ overriden from the "path" config key. sub path_prefix { my ( $self, $c ) = @_; unless ( $c ) { - $c = ($self->isa('Catalyst') ? $self : $self->{application}); + $c = ($self->isa('Catalyst') ? $self : $self->_application); } my $hash = (ref $self ? $self : $self->config); # hate app-is-class return $hash->{path} if exists $hash->{path}; @@ -138,7 +150,9 @@ sub path_prefix { =head2 $self->register_actions($c) -register all actions for this component based on a given context. +Finds all applicable actions for this component, creates Catalyst::Action +objects (using $self->create_action) for them and registers them with +$c->dispatcher. =cut @@ -186,6 +200,15 @@ sub register_actions { } } +=head2 $self->create_action(%args) + +Called with a hash of data to be use for construction of a new Catalyst::Action +(or appropriate sub/alternative class) object. + +Primarily designed for the use of register_actions. + +=cut + sub create_action { my $self = shift; my %args = @_; @@ -235,7 +258,7 @@ sub _parse_attrs { my $raw = $raw_attributes{$key}; - foreach my $value (ref($raw) ? @$raw : $raw) { + foreach my $value (ref($raw) eq 'ARRAY' ? @$raw : $raw) { my $meth = "_parse_${key}_attr"; if ( $self->can($meth) ) { @@ -299,6 +322,12 @@ sub _parse_ActionClass_attr { return ( 'ActionClass', $value ); } +=head2 $self->_application + +=head2 $self->_app + +Returns the application instance stored by C + =head1 SEE ALSO L, L.