do not include .git directory
[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
81393881 12override exports_for_package => sub {
13 my ($self, $package) = @_;
14 my %exports = $self->SUPER::exports_for_package($package);
15 delete $exports{class};
16 $exports{role} = sub { $self->do_role_sub($package, @_); };
17 return %exports;
18};
7adfd53f 19
81393881 20override next_import_package => sub { 'Moose::Role' };
9b2f4054 21
81393881 22override default_base => sub { () };
7adfd53f 23
81393881 24override add_method_to_target => sub {
25 my ($self, $target, $method) = @_;
badce0a4 26 $target->meta->add_method(@$method);
81393881 27};
9be81e19 28override next_import => sub {
29 my ($self) = @_;
30 my $import = super;
31 # ugh
32 return sub {
33 push @_, '-metaclass' => 'Reaction::Meta::Role';
34 goto $import;
35 };
36};
81393881 37sub do_role_sub {
38 my ($self, $package, $role, $which, $setup) = @_;
39 confess "Invalid role declaration, should be: role Role which { ... }"
40 unless ($which eq 'which' && ref($setup) eq 'CODE');
41 $self->setup_and_cleanup($role, $setup);
7adfd53f 42};
9b2f4054 43
81393881 44__PACKAGE__->meta->make_immutable;
45
46
7adfd53f 471;
48
49=head1 NAME
50
51Reaction::Role
52
53=head1 DESCRIPTION
54
55=head1 SEE ALSO
56
57L<Moose::Role>
58
59=head1 AUTHORS
60
61See L<Reaction::Class> for authors.
62
63=head1 LICENSE
64
65See L<Reaction::Class> for the license.
66
67=cut