minor fix for _build_fields_for_type_*
[catagits/Reaction.git] / lib / Reaction / Role.pm
1 package Reaction::Role;
2
3 use Moose::Role ();
4 use Reaction::ClassExporter;
5 use Reaction::Class;
6 use Moose::Meta::Class;
7 #TODO: review for Reaction::Object switch / Reaction::Meta::Class
8 *Moose::Meta::Role::add_method = sub {
9   Moose::Meta::Class->can("add_method")->(@_);
10 };
11
12 class 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   };
21   
22   override next_import_package => sub { 'Moose::Role' };
23   
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 };
34   
35 1;
36
37 =head1 NAME
38
39 Reaction::Role
40
41 =head1 DESCRIPTION
42
43 =head1 SEE ALSO
44
45 L<Moose::Role>
46
47 =head1 AUTHORS
48
49 See L<Reaction::Class> for authors.
50
51 =head1 LICENSE
52
53 See L<Reaction::Class> for the license.
54
55 =cut