diff options
author | matthewt <matthewt@03d0b0b2-0e1a-0410-a411-fdb2f4bd65d7> | 2007-09-12 18:11:34 +0000 |
---|---|---|
committer | matthewt <matthewt@03d0b0b2-0e1a-0410-a411-fdb2f4bd65d7> | 2007-09-12 18:11:34 +0000 |
commit | 7adfd53f17f66ffe93763e944ed1d3fc52a369dc (patch) | |
tree | 19e599e74419b41cbbe651fd226b81e8b73551d3 /lib/Reaction/Role.pm | |
parent | c728c97cb1061330e63c7cc048e768ef74988fe6 (diff) | |
download | reaction-7adfd53f17f66ffe93763e944ed1d3fc52a369dc.tar.gz reaction-7adfd53f17f66ffe93763e944ed1d3fc52a369dc.zip |
moved shit to trunk
Diffstat (limited to 'lib/Reaction/Role.pm')
-rw-r--r-- | lib/Reaction/Role.pm | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/lib/Reaction/Role.pm b/lib/Reaction/Role.pm new file mode 100644 index 0000000..ea5b948 --- /dev/null +++ b/lib/Reaction/Role.pm @@ -0,0 +1,55 @@ +package Reaction::Role; + +use Moose::Role (); +use Reaction::ClassExporter; +use Reaction::Class; +use Moose::Meta::Class; +#TODO: review for Reaction::Object switch / Reaction::Meta::Class +*Moose::Meta::Role::add_method = sub { + Moose::Meta::Class->can("add_method")->(@_); +}; + +class Role which { + + override exports_for_package => sub { + my ($self, $package) = @_; + my %exports = $self->SUPER::exports_for_package($package); + delete $exports{class}; + $exports{role} = sub { $self->do_role_sub($package, @_); }; + return %exports; + }; + + override next_import_package => sub { 'Moose::Role' }; + + override default_base => sub { () }; + + implements do_role_sub => as { + my ($self, $package, $role, $which, $setup) = @_; + confess "Invalid role declaration, should be: role Role which { ... }" + unless ($which eq 'which' && ref($setup) eq 'CODE'); + $self->setup_and_cleanup($role, $setup); + }; + +}; + +1; + +=head1 NAME + +Reaction::Role + +=head1 DESCRIPTION + +=head1 SEE ALSO + +L<Moose::Role> + +=head1 AUTHORS + +See L<Reaction::Class> for authors. + +=head1 LICENSE + +See L<Reaction::Class> for the license. + +=cut |