revert #515, completely the wrong solution and blows the diff for the right one
[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;
7#TODO: review for Reaction::Object switch / Reaction::Meta::Class
fd86f681 8*Moose::Meta::Role::add_method = sub {
9 Moose::Meta::Class->can("add_method")->(@_);
10};
7adfd53f 11
12class Role which {
13
14 override exports_for_package => sub {
15 my ($self, $package) = @_;
16 my %exports = $self->SUPER::exports_for_package($package);
17 delete $exports{class};
18 $exports{role} = sub { $self->do_role_sub($package, @_); };
19 return %exports;
20 };
fd86f681 21
7adfd53f 22 override next_import_package => sub { 'Moose::Role' };
fd86f681 23
7adfd53f 24 override default_base => sub { () };
25
26 implements do_role_sub => as {
27 my ($self, $package, $role, $which, $setup) = @_;
28 confess "Invalid role declaration, should be: role Role which { ... }"
29 unless ($which eq 'which' && ref($setup) eq 'CODE');
30 $self->setup_and_cleanup($role, $setup);
31 };
32
33};
fd86f681 34
7adfd53f 351;
36
37=head1 NAME
38
39Reaction::Role
40
41=head1 DESCRIPTION
42
43=head1 SEE ALSO
44
45L<Moose::Role>
46
47=head1 AUTHORS
48
49See L<Reaction::Class> for authors.
50
51=head1 LICENSE
52
53See L<Reaction::Class> for the license.
54
55=cut