use strict;
use base 'Class::Data::Inheritable';
+use Catalyst::Exception;
use Catalyst::Utils;
use Text::ASCIITable;
use Tree::Simple;
=over 4
+=item $c->detach($command)
+
+Like C<forward> but doesn't return.
+
+=cut
+
+sub detach {
+ my ( $c, $command ) = @_;
+ $c->forward($command) if $command;
+ die $Catalyst::Engine::DETACH;
+}
+
=item $c->dispatch
Dispatch request to actions.
unless ($namespace) {
if ( my $result = $c->get_action($action) ) {
- $namespace =
- Catalyst::Utils::class2prefix( $result->[0]->[0]->[0] );
+ $namespace = Catalyst::Utils::class2prefix( $result->[0]->[0]->[0],
+ $c->config->{case_sensitive} );
}
}
$command =~ s/^\///;
}
- else { $namespace = Catalyst::Utils::class2prefix($caller) || '/' }
+ else {
+ $namespace =
+ Catalyst::Utils::class2prefix( $caller, $c->config->{case_sensitive} )
+ || '/';
+ }
my $results = $c->get_action( $command, $namespace );
sub set_action {
my ( $c, $method, $code, $namespace, $attrs ) = @_;
- my $prefix = Catalyst::Utils::class2prefix($namespace) || '';
+ my $prefix =
+ Catalyst::Utils::class2prefix( $namespace, $c->config->{case_sensitive} )
+ || '';
my %flags;
for my $attr ( @{$attrs} ) {
=cut
sub setup_actions {
- my ( $self, $comps ) = @_;
+ my $self = shift;
# These are the core structures
$self->actions(
# We use a tree
$self->tree( Tree::Simple->new( 0, Tree::Simple->ROOT ) );
- for my $comp (@$comps) {
- $comp = ref $comp || $comp;
+ for my $comp ( keys %{ $self->components } ) {
+
+ # We only setup components that inherit from Catalyst::Base
+ next unless $comp->isa('Catalyst::Base');
for my $action ( @{ Catalyst::Utils::reflect_actions($comp) } ) {
my ( $code, $attrs ) = @{$action};
}
+ return unless $self->debug;
+
my $actions = $self->actions;
my $privates = Text::ASCIITable->new;
$privates->setCols( 'Private', 'Class' );
$walker->( $walker, $self->tree, '' );
$self->log->debug( 'Loaded private actions', $privates->draw )
- if ( @{ $privates->{tbl_rows} } && $self->debug );
+ if ( @{ $privates->{tbl_rows} } );
my $publics = Text::ASCIITable->new;
$publics->setCols( 'Public', 'Private' );
}
$self->log->debug( 'Loaded public actions', $publics->draw )
- if ( @{ $publics->{tbl_rows} } && $self->debug );
+ if ( @{ $publics->{tbl_rows} } );
my $regexes = Text::ASCIITable->new;
$regexes->setCols( 'Regex', 'Private' );
}
$self->log->debug( 'Loaded regex actions', $regexes->draw )
- if ( @{ $regexes->{tbl_rows} } && $self->debug );
+ if ( @{ $regexes->{tbl_rows} } );
}
=back