search spec components factored out of T365
[catagits/Reaction.git] / lib / Reaction / Role.pm
CommitLineData
7adfd53f 1package Reaction::Role;
2
3use Moose::Role ();
4use Reaction::ClassExporter;
5use Reaction::Class;
6use Moose::Meta::Class;
9b2f4054 7
7adfd53f 8#TODO: review for Reaction::Object switch / Reaction::Meta::Class
7adfd53f 9
81393881 10use namespace::clean -except => [ qw(meta) ];
7adfd53f 11
9b2f4054 12
81393881 13override exports_for_package => sub {
14 my ($self, $package) = @_;
15 my %exports = $self->SUPER::exports_for_package($package);
16 delete $exports{class};
17 $exports{role} = sub { $self->do_role_sub($package, @_); };
18 return %exports;
19};
7adfd53f 20
81393881 21override next_import_package => sub { 'Moose::Role' };
9b2f4054 22
81393881 23override default_base => sub { () };
7adfd53f 24
81393881 25override add_method_to_target => sub {
26 my ($self, $target, $method) = @_;
27 $target->meta->alias_method(@$method);
28};
29sub do_role_sub {
30 my ($self, $package, $role, $which, $setup) = @_;
31 confess "Invalid role declaration, should be: role Role which { ... }"
32 unless ($which eq 'which' && ref($setup) eq 'CODE');
33 $self->setup_and_cleanup($role, $setup);
7adfd53f 34};
9b2f4054 35
81393881 36__PACKAGE__->meta->make_immutable;
37
38
7adfd53f 391;
40
41=head1 NAME
42
43Reaction::Role
44
45=head1 DESCRIPTION
46
47=head1 SEE ALSO
48
49L<Moose::Role>
50
51=head1 AUTHORS
52
53See L<Reaction::Class> for authors.
54
55=head1 LICENSE
56
57See L<Reaction::Class> for the license.
58
59=cut