r20898@agaton (orig r755): wreis | 2008-07-24 00:32:56 +0100
[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
8 #TODO: review for Reaction::Object switch / Reaction::Meta::Class
9
10 class Role which {
11
12   override 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   };
19
20   override next_import_package => sub { 'Moose::Role' };
21
22   override default_base => sub { () };
23
24   override add_method_to_target => sub {
25     my ($self, $target, $method) = @_;
26     $target->meta->alias_method(@$method);
27   };
28
29   implements do_role_sub => as {
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);
34   };
35
36 };
37
38 1;
39
40 =head1 NAME
41
42 Reaction::Role
43
44 =head1 DESCRIPTION
45
46 =head1 SEE ALSO
47
48 L<Moose::Role>
49
50 =head1 AUTHORS
51
52 See L<Reaction::Class> for authors.
53
54 =head1 LICENSE
55
56 See L<Reaction::Class> for the license.
57
58 =cut