X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse%2FRole.pm;h=14ba27aa275cede749c979611e648d1af38144a8;hb=84e9b28560b15545a21b389885b0c9514fa93165;hp=57f319d3db83250ab00de3a02c9892101f1e0583;hpb=e71d80332383fc71e303ce387e6ed4be90a5d35e;p=gitmo%2FMouse.git diff --git a/lib/Mouse/Role.pm b/lib/Mouse/Role.pm index 57f319d..14ba27a 100644 --- a/lib/Mouse/Role.pm +++ b/lib/Mouse/Role.pm @@ -23,25 +23,45 @@ do { } }, before => sub { - return sub { } + my $caller = $CALLER; + return sub { + my $code = pop; + for (@_) { + $caller->meta->add_before_method_modifier($_ => $code); + } + } }, after => sub { - return sub { } + my $caller = $CALLER; + return sub { + my $code = pop; + for (@_) { + $caller->meta->add_after_method_modifier($_ => $code); + } + } }, around => sub { - return sub { } + my $caller = $CALLER; + return sub { + my $code = pop; + for (@_) { + $caller->meta->add_around_method_modifier($_ => $code); + } + } }, has => sub { my $caller = $CALLER; return sub { my $name = shift; - my @opts = @_; + my %opts = @_; - $caller->meta->add_attribute($name => \@opts); + $caller->meta->add_attribute($name => \%opts); } }, with => sub { - return sub { } + return sub { + confess "Role does not currently support 'with'"; + } }, requires => sub { return sub { } @@ -84,3 +104,56 @@ do { 1; +__END__ + +=head1 NAME + +Mouse::Role + +=head1 KEYWORDS + +=head2 meta -> Mouse::Meta::Role + +Returns this role's metaclass instance. + +=head2 before (method|methods) => Code + +Sets up a "before" method modifier. See L or +L. + +=head2 after (method|methods) => Code + +Sets up an "after" method modifier. See L or +L. + +=head2 around (method|methods) => Code + +Sets up an "around" method modifier. See L or +L. + +=head2 has (name|names) => parameters + +Sets up an attribute (or if passed an arrayref of names, multiple attributes) to +this role. See L. + +=head2 confess error -> BOOM + +L for your convenience. + +=head2 blessed value -> ClassName | undef + +L for your convenience. + +=head1 MISC + +=head2 import + +Importing Mouse::Role will give you sugar. + +=head2 unimport + +Please unimport Mouse (C) so that if someone calls one of the +keywords (such as L) it will break loudly instead breaking subtly. + +=cut +