Commit | Line | Data |
c4057ce2 |
1 | package CatalystX::Routes::Role::Controller; |
2 | |
3 | use Moose::Role; |
4 | use namespace::clean -except => 'meta'; |
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; |