use namespace::autoclean
[catagits/CatalystX-Routes.git] / lib / CatalystX / Routes / Role / Controller.pm
CommitLineData
c4057ce2 1package CatalystX::Routes::Role::Controller;
2
3use Moose::Role;
565ade29 4use namespace::autoclean;
c4057ce2 5
6requires 'register_actions';
7
8after 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
441;