moved to CatalystX::Declare
[catagits/CatalystX-Declare.git] / lib / CatalystX / Declare / Controller / QualifyClassNames.pm
1 use MooseX::Declare;
2
3 use Class::MOP;
4 use Class::Inspector;
5
6 role CatalystX::Declare::Controller::QualifyClassNames {
7
8     use Carp qw( croak );
9
10     method _qualify_class_name (Str $type, Str $name) {
11
12         my $app = ref($self->_application) || $self->_application;
13
14         my @possibilities = (
15             join('::', $app, $type, $name),
16             join('::', 'Catalyst', $type, $name),
17             $name,
18         );
19
20         for my $class (@possibilities) {
21
22             return $class 
23                 if Class::MOP::is_class_loaded($class);
24
25             return $class
26                 if Class::Inspector->installed($class);
27         }
28
29         croak sprintf q(Unable to locate %s %s named '%s', tried: %s),
30             ($type =~ /^[aeiuo]/i ? 'an' : 'a'),
31             $type,
32             $name,
33             join(', ', @possibilities),
34             ;
35     }
36 }