62205624e009a858d501572e4bedaec490deddc4
[catagits/CatalystX-Declare.git] / lib / CatalystX / Declare / Keyword / Role.pm
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';
8     use aliased 'MooseX::Role::Parameterized::Meta::Role::Parameterizable';
9     use aliased 'CatalystX::Declare::Keyword::Action',  'ActionKeyword';
10
11
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
19     before add_namespace_customizations (Object $ctx, Str $package) {
20
21         my $source  = $self->import_symbols_from($ctx);
22         my @symbols = $self->imported_moose_symbols;
23
24         $ctx->add_preamble_code_parts(
25             'use CLASS',
26         );
27     }
28
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     }
39
40     around default_inner (@args) {
41
42         return [ 
43             @{ $self->$orig(@args) },
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
61     controller_role MyApp::Web::ControllerRole::Foo {
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
72 This handler provides the C<controller_role> keyword. It is an extension of the
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