Commit | Line | Data |
c4057ce2 |
1 | package CatalystX::Routes::Role::Controller; |
2 | |
3 | use Moose::Role; |
565ade29 |
4 | use namespace::autoclean; |
c4057ce2 |
5 | |
6 | requires 'register_actions'; |
7 | |
8 | after register_actions => sub { |
9 | my $self = shift; |
10 | my $c = shift; |
11 | |
c4057ce2 |
12 | for my $route ( $self->meta()->route_names() ) { |
13 | my ( $attrs, $method ) = @{ $self->meta()->get_route($route) }; |
14 | |
73bef299 |
15 | $self->_add_cx_routes_action( $c, $route, $attrs, $method->body() ); |
16 | } |
17 | |
18 | for my $chain_point ( $self->meta()->chain_point_names() ) { |
19 | my ( $attrs, $code ) |
20 | = @{ $self->meta()->get_chain_point($chain_point) }; |
21 | |
22 | $self->_add_cx_routes_action( $c, $chain_point, $attrs, $code ); |
23 | } |
24 | }; |
c4057ce2 |
25 | |
73bef299 |
26 | sub _add_cx_routes_action { |
27 | my $self = shift; |
28 | my $c = shift; |
29 | my $name = shift; |
30 | my $attrs = shift; |
31 | my $code = shift; |
c4057ce2 |
32 | |
73bef299 |
33 | my $class = $self->catalyst_component_name; |
34 | my $namespace = $self->action_namespace($c); |
c4057ce2 |
35 | |
73bef299 |
36 | for my $key ( keys %{$attrs} ) { |
37 | my $parse_meth = "_parse_${key}_attr"; |
c4057ce2 |
38 | |
73bef299 |
39 | next unless $self->can($parse_meth); |
c4057ce2 |
40 | |
73bef299 |
41 | ( undef, my $value ) |
42 | = $self->$parse_meth( $c, $name, $attrs->{$key} ); |
c4057ce2 |
43 | |
73bef299 |
44 | $attrs->{$key} = [$value]; |
c4057ce2 |
45 | } |
73bef299 |
46 | |
47 | my $reverse = $namespace ? "${namespace}/$name" : $name; |
48 | |
49 | my $action = $self->create_action( |
50 | name => $name, |
51 | code => $code, |
52 | reverse => $reverse, |
53 | namespace => $namespace, |
54 | class => $class, |
55 | attributes => $attrs, |
56 | ); |
57 | |
58 | $c->dispatcher->register( $c, $action ); |
59 | } |
c4057ce2 |
60 | |
61 | 1; |