7cadc413b6d84ce4bb71cbbdc437d95b078122ac
[catagits/Gitalist.git] / local-lib5 / lib / perl5 / MooseX / Declare / Syntax / RoleApplication.pm
1 package MooseX::Declare::Syntax::RoleApplication;
2
3 use Moose::Role;
4
5 use aliased 'MooseX::Declare::Context::Namespaced';
6
7 use namespace::clean -except => 'meta';
8
9 with qw(
10     MooseX::Declare::Syntax::OptionHandling
11 );
12
13 around context_traits => sub { shift->(@_), Namespaced };
14
15 sub add_with_option_customizations {
16     my ($self, $ctx, $package, $roles) = @_;
17
18     # consume roles
19     $ctx->add_early_cleanup_code_parts(
20         sprintf 'Moose::Util::apply_all_roles(%s->meta, %s)',
21             $package,
22             join ', ',
23             map  { "q[$_]" }
24             map  { $ctx->qualify_namespace($_) }
25                 @{ $roles },
26     );
27
28     return 1;
29 }
30
31 1;
32
33 =head1 NAME
34
35 MooseX::Declare::Syntax::RoleApplication - Handle user specified roles
36
37 =head1 DESCRIPTION
38
39 This role extends L<MooseX::Declare::Syntax::OptionHandling> and provides
40 a C<with|/add_with_option_customizations> option.
41
42 =head1 CONSUMES
43
44 =over
45
46 =item * L<MooseX::Declare::Syntax::OptionHandling>
47
48 =back
49
50 =head1 METHODS
51
52 =head2 add_with_option_customizations
53
54   Object->add_with_option_customizations (
55       Object   $context,
56       Str      $package,
57       ArrayRef $roles,
58       HashRef  $options
59   )
60
61 This will add a call to C<with> in the scope code.
62
63 =head1 SEE ALSO
64
65 =over
66
67 =item * L<MooseX::Declare>
68
69 =item * L<MooseX::Declare::Syntax::OptionHandling>
70
71 =back
72
73 =head1 AUTHOR, COPYRIGHT & LICENSE
74
75 See L<MooseX::Declare>
76
77 =cut