use Tree::Simple::Visitor::FindByPath;
use Scalar::Util ();
-# Stringify to class
-use overload '""' => sub { return ref(shift) }, fallback => 1;
-
-
#do these belong as package vars or should we build these via a builder method?
# Preload these action types
our @PRELOAD = qw/Index Path Regex/;
our @POSTLOAD = qw/Default/;
has _tree => (is => 'rw');
-has _dispatch_types => (is => 'rw');
-has _registered_dispatch_types => (is => 'rw');
-has _method_action_class => (is => 'rw');
-has _action_container_class => (is => 'rw');
+has _dispatch_types => (is => 'rw', default => sub { [] }, required => 1, lazy => 1);
+has _registered_dispatch_types => (is => 'rw', default => sub { {} }, required => 1, lazy => 1);
+has _method_action_class => (is => 'rw', default => 'Catalyst::Action');
+has _action_container_class => (is => 'rw', default => 'Catalyst::ActionContainer');
+
has preload_dispatch_types => (is => 'rw', required => 1, lazy => 1, default => sub { [@PRELOAD] });
has postload_dispatch_types => (is => 'rw', required => 1, lazy => 1, default => sub { [@POSTLOAD] });
has _action_hash => (is => 'rw', required => 1, lazy => 1, default => sub { {} });
sub setup_actions {
my ( $self, $c ) = @_;
- $self->_dispatch_types( [] );
- $self->_registered_dispatch_types( {} );
- $self->_method_action_class('Catalyst::Action');
- $self->_action_container_class('Catalyst::ActionContainer');
my @classes =
$self->_load_dispatch_types( @{ $self->preload_dispatch_types } );
for my $type (@types) {
my $class =
( $type =~ /^\+(.*)$/ ) ? $1 : "Catalyst::DispatchType::${type}";
- #eval "require $class";
+
eval { Class::MOP::load_class($class) };
Catalyst::Exception->throw( message => qq/Couldn't load "$class"/ )
if $@;