Grammar tweaklet
[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
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 26sub _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
611;