Commit | Line | Data |
856ac9a7 |
1 | use MooseX::Declare; |
2 | |
3 | class CatalystX::Declare::Keyword::Role |
4 | extends MooseX::Declare::Syntax::Keyword::Role { |
5 | |
6 | |
7 | use aliased 'MooseX::MethodAttributes::Role::Meta::Role'; |
c2a8165b |
8 | use aliased 'MooseX::Role::Parameterized::Meta::Role::Parameterizable'; |
9 | use aliased 'CatalystX::Declare::Keyword::Action', 'ActionKeyword'; |
856ac9a7 |
10 | |
11 | |
c2a8165b |
12 | around import_symbols_from (Object $ctx) { |
13 | |
14 | $ctx->has_parameter_signature |
15 | ? $self->$orig($ctx) |
16 | : sprintf('Moose::Role -traits => q(MethodAttributes),') |
17 | } |
18 | |
856ac9a7 |
19 | before add_namespace_customizations (Object $ctx, Str $package) { |
20 | |
c2a8165b |
21 | my $source = $self->import_symbols_from($ctx); |
22 | my @symbols = $self->imported_moose_symbols; |
23 | |
856ac9a7 |
24 | $ctx->add_preamble_code_parts( |
25 | 'use CLASS', |
856ac9a7 |
26 | ); |
27 | } |
28 | |
c2a8165b |
29 | after add_namespace_customizations (Object $ctx, Str $package) { |
30 | |
31 | $ctx->add_preamble_code_parts( |
32 | sprintf( |
33 | 'use %s -traits => q(%s), qw( has )', |
34 | 'MooseX::Role::Parameterized', |
35 | 'MooseX::MethodAttributes::Role::Meta::Role', |
36 | ), |
37 | ) if $ctx->has_parameter_signature; |
38 | } |
856ac9a7 |
39 | |
c2a8165b |
40 | around default_inner (@args) { |
856ac9a7 |
41 | |
42 | return [ |
c2a8165b |
43 | @{ $self->$orig(@args) }, |
856ac9a7 |
44 | ActionKeyword->new(identifier => 'action'), |
45 | ActionKeyword->new(identifier => 'under'), |
46 | ActionKeyword->new(identifier => 'final'), |
47 | ]; |
48 | } |
49 | } |
50 | |
51 | __END__ |
52 | |
53 | =head1 NAME |
54 | |
55 | CatalystX::Declare::Keyword::Role - Declare Catalyst Controller Roles |
56 | |
57 | =head1 SYNOPSIS |
58 | |
59 | use CatalystX::Declare; |
60 | |
205323ac |
61 | controller_role MyApp::Web::ControllerRole::Foo { |
856ac9a7 |
62 | |
63 | method provided_method { ... } |
64 | |
65 | action foo, under base, is final { ... } |
66 | |
67 | around bar_action (Object $ctx) { ... } |
68 | } |
69 | |
70 | =head1 DESCRIPTION |
71 | |
205323ac |
72 | This handler provides the C<controller_role> keyword. It is an extension of the |
856ac9a7 |
73 | L<MooseX::Declare::Syntax::Keyword::Role> handler. Like with declared |
74 | controllers, the C<method> keyword and the modifiers are provided. For details |
75 | on the syntax for action declarations have a look at |
76 | L<CatalystX::Declare::Keyword::Action>, which also documents the effects of |
77 | method modifiers on actions. |
78 | |
79 | =head1 SUPERCLASSES |
80 | |
81 | =over |
82 | |
83 | =item L<MooseX::Declare::Syntax::Keyword::Role> |
84 | |
85 | =back |
86 | |
87 | =head1 METHODS |
88 | |
89 | =head2 add_namespace_customizations |
90 | |
91 | Object->add_namespace_customizations (Object $ctx, Str $package) |
92 | |
93 | This hook is called by L<MooseX::Declare> and will set the package up as a role |
94 | and apply L<MooseX::MethodAttributes>. |
95 | |
96 | =head2 default_inner |
97 | |
98 | ArrayRef[Object] Object->default_inner () |
99 | |
100 | Same as L<CatalystX::Declare::Keyword::Class/default_inner>. |
101 | |
102 | =head1 SEE ALSO |
103 | |
104 | =over |
105 | |
106 | =item L<CatalystX::Declare> |
107 | |
108 | =item L<MooseX::Declare/role> |
109 | |
110 | =item L<CatalystX::Declare::Keyword::Action> |
111 | |
112 | =item L<CatalystX::Declare::Keyword::Controller> |
113 | |
114 | =back |
115 | |
116 | =head1 AUTHOR |
117 | |
118 | See L<CatalystX::Declare/AUTHOR> for author information. |
119 | |
120 | =head1 LICENSE |
121 | |
122 | This program is free software; you can redistribute it and/or modify it under |
123 | the same terms as perl itself. |
124 | |
125 | =cut |