use namespace::autoclean
[catagits/CatalystX-Routes.git] / lib / CatalystX / Routes / Role / Controller.pm
1 package CatalystX::Routes::Role::Controller;
2
3 use Moose::Role;
4 use namespace::autoclean;
5
6 requires 'register_actions';
7
8 after register_actions => sub {
9     my $self = shift;
10     my $c    = shift;
11
12     my $class     = $self->catalyst_component_name;
13     my $namespace = $self->action_namespace($c);
14
15     for my $route ( $self->meta()->route_names() ) {
16         my ( $attrs, $method ) = @{ $self->meta()->get_route($route) };
17
18         for my $key ( keys %{$attrs} ) {
19             my $parse_meth = "_parse_${key}_attr";
20
21             next unless $self->can($parse_meth);
22
23             ( undef, my $value )
24                 = $self->$parse_meth( $c, $route, $attrs->{$key} );
25
26             $attrs->{$key} = [$value];
27         }
28
29         my $reverse = $namespace ? "${namespace}/$route" : $route;
30
31         my $action = $self->create_action(
32             name       => $route,
33             code       => $method->body(),
34             reverse    => $reverse,
35             namespace  => $namespace,
36             class      => $class,
37             attributes => $attrs,
38         );
39
40         $c->dispatcher->register( $c, $action );
41     }
42 };
43
44 1;