98074cd892f2b751ce1a331ee072c98f8c5b9c09
[catagits/Reaction.git] / lib / Reaction / Role / Parameterized.pm
1 package Reaction::Role::Parameterized;
2
3 use MooseX::Role::Parameterized ();
4 use Reaction::ClassExporter;
5 use Reaction::Class;
6 use Moose::Meta::Class;
7
8 use namespace::clean -except => [ qw(meta) ];
9
10 override exports_for_package => sub {
11   my ($self, $package) = @_;
12   my %exports = $self->SUPER::exports_for_package($package);
13   delete $exports{class};
14   return %exports;
15 };
16
17 override default_base => sub { () };
18
19 override exporter_for_package => sub {
20     my ($self) = @_;
21     my ($import) = Moose::Exporter->build_import_methods(
22         also        => ['MooseX::Role::Parameterized'],
23         with_caller => ['role'],
24     );
25     $import;
26 };
27
28 override next_import => sub { };
29
30 sub role (&) {
31     my $caller = shift;
32     my ($code) = @_;
33     &MooseX::Role::Parameterized::role($caller, sub {
34         my ($p, %args) = @_;
35         $args{operating_on} = Moose::Util::MetaRole::apply_metaroles(
36             for            => $args{operating_on}->name,
37             role_metaroles => {
38                 applied_attribute => ['Reaction::Role::Meta::Attribute'],
39             },
40         ) if Moose->VERSION >= 1.9900;
41         $code->($p, %args);
42     });
43 }
44
45 __PACKAGE__->meta->make_immutable;
46
47
48 1;
49
50 =head1 NAME
51
52 Reaction::Role
53
54 =head1 DESCRIPTION
55
56 =head1 SEE ALSO
57
58 L<Moose::Role>
59
60 =head1 AUTHORS
61
62 See L<Reaction::Class> for authors.
63
64 =head1 LICENSE
65
66 See L<Reaction::Class> for the license.
67
68 =cut