9 use Sub::Name 'subname';
11 our $VERSION = '0.01';
13 use Moose::Meta::Role;
19 # we should never export to main
20 return if $pkg eq 'main';
22 Moose::Util::TypeConstraints->import($pkg);
25 if ($pkg->can('meta')) {
27 (blessed($meta) && $meta->isa('Moose::Meta::Role'))
28 || confess "Whoops, not møøsey enough";
31 $meta = Moose::Meta::Role->new(
34 $meta->role_meta->add_method('meta' => sub { $meta })
38 # &alias_method will install the method, but it
39 # will not name it with
42 $meta->role_meta->alias_method('extends' => subname 'Moose::Role::extends' => sub {
43 confess "Moose::Role does not currently support 'extends'"
47 $meta->role_meta->alias_method('has' => subname 'Moose::Role::has' => sub {
48 my ($name, %options) = @_;
49 $meta->add_attribute($name, %options)
52 # handle method modifers
53 $meta->role_meta->alias_method('before' => subname 'Moose::Role::before' => sub {
55 $meta->add_method_modifier('before' => $_, $code) for @_;
57 $meta->role_meta->alias_method('after' => subname 'Moose::Role::after' => sub {
59 $meta->add_method_modifier('after' => $_, $code) for @_;
61 $meta->role_meta->alias_method('around' => subname 'Moose::Role::around' => sub {
63 $meta->add_method_modifier('around' => $_, $code) for @_;
66 $meta->role_meta->alias_method('super' => subname 'Moose::Role::super' => sub {});
67 $meta->role_meta->alias_method('override' => subname 'Moose::Role::override' => sub {
68 my ($name, $code) = @_;
69 $meta->add_method_modifier('override' => $name, $code);
72 $meta->role_meta->alias_method('inner' => subname 'Moose::Role::inner' => sub {});
73 $meta->role_meta->alias_method('augment' => subname 'Moose::Role::augment' => sub {
74 my ($name, $code) = @_;
75 $meta->add_method_modifier('augment' => $name, $code);
78 # we recommend using these things
79 # so export them for them
80 $meta->role_meta->alias_method('confess' => \&Carp::confess);
81 $meta->role_meta->alias_method('blessed' => \&Scalar::Util::blessed);
92 Moose::Role - The Moose Role
104 All complex software has bugs lurking in it, and this module is no
105 exception. If you find a bug please either email me, or add the bug
110 Stevan Little E<lt>stevan@iinteractive.comE<gt>
112 =head1 COPYRIGHT AND LICENSE
114 Copyright 2006 by Infinity Interactive, Inc.
116 L<http://www.iinteractive.com>
118 This library is free software; you can redistribute it and/or modify
119 it under the same terms as Perl itself.