X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FClass%2FMOP%2FMethod%2FWrapped.pm;h=62cdf2b2f54ee08032720417ca1cf4d38ed0935b;hb=403cfbeccca4e7750da88c52ad7fd81f35a7e9a7;hp=372f3d3f7f33ed00b44e5f6b680706babd8bf34b;hpb=809a26fc6ca09ac0e6eb72a226eb5813e579482b;p=gitmo%2FClass-MOP.git diff --git a/lib/Class/MOP/Method/Wrapped.pm b/lib/Class/MOP/Method/Wrapped.pm index 372f3d3..62cdf2b 100644 --- a/lib/Class/MOP/Method/Wrapped.pm +++ b/lib/Class/MOP/Method/Wrapped.pm @@ -7,7 +7,8 @@ use warnings; use Carp 'confess'; use Scalar::Util 'blessed'; -our $VERSION = '0.60'; +our $VERSION = '0.82'; +$VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; use base 'Class::MOP::Method'; @@ -91,27 +92,37 @@ sub wrap { package_name => $params{package_name} || $code->package_name, name => $params{name} || $code->name, ); - $method->{'%!modifier_table'} = $modifier_table; + $method->{'modifier_table'} = $modifier_table; $method; } sub get_original_method { my $code = shift; - $code->{'%!modifier_table'}->{orig}; + $code->{'modifier_table'}->{orig}; } sub add_before_modifier { my $code = shift; my $modifier = shift; - unshift @{$code->{'%!modifier_table'}->{before}} => $modifier; - $_build_wrapped_method->($code->{'%!modifier_table'}); + unshift @{$code->{'modifier_table'}->{before}} => $modifier; + $_build_wrapped_method->($code->{'modifier_table'}); +} + +sub before_modifiers { + my $code = shift; + return @{$code->{'modifier_table'}->{before}}; } sub add_after_modifier { my $code = shift; my $modifier = shift; - push @{$code->{'%!modifier_table'}->{after}} => $modifier; - $_build_wrapped_method->($code->{'%!modifier_table'}); + push @{$code->{'modifier_table'}->{after}} => $modifier; + $_build_wrapped_method->($code->{'modifier_table'}); +} + +sub after_modifiers { + my $code = shift; + return @{$code->{'modifier_table'}->{after}}; } { @@ -132,15 +143,20 @@ sub add_after_modifier { sub add_around_modifier { my $code = shift; my $modifier = shift; - unshift @{$code->{'%!modifier_table'}->{around}->{methods}} => $modifier; - $code->{'%!modifier_table'}->{around}->{cache} = $compile_around_method->( - @{$code->{'%!modifier_table'}->{around}->{methods}}, - $code->{'%!modifier_table'}->{orig}->body + unshift @{$code->{'modifier_table'}->{around}->{methods}} => $modifier; + $code->{'modifier_table'}->{around}->{cache} = $compile_around_method->( + @{$code->{'modifier_table'}->{around}->{methods}}, + $code->{'modifier_table'}->{orig}->body ); - $_build_wrapped_method->($code->{'%!modifier_table'}); + $_build_wrapped_method->($code->{'modifier_table'}); } } +sub around_modifiers { + my $code = shift; + return @{$code->{'modifier_table'}->{around}->{methods}}; +} + 1; __END__ @@ -149,12 +165,12 @@ __END__ =head1 NAME -Class::MOP::Method::Wrapped - Method Meta Object to handle before/around/after modifiers +Class::MOP::Method::Wrapped - Method Meta Object for methods with before/after/around modifiers =head1 DESCRIPTION -This is a L subclass which provides the funtionality -to wrap a given CODE reference with before, after and around method modifiers. +This is a L subclass which implements before, +after, and around method modifiers. =head1 METHODS @@ -162,31 +178,54 @@ to wrap a given CODE reference with before, after and around method modifiers. =over 4 -=item B +=item B<< Class::MOP::Method::Wrapped->wrap($metamethod, %options) >> -This is the constructor, it will return a B -instance that can be used to add before, after and around modifiers to. +This is the constructor. It accepts a L object and +a hash of options. -=item B +The options are: -This returns the original CODE reference that was provided to the -constructor. +=over 8 + +=item * name + +The method name (without a package name). This will be taken from the +provided L object if it is not provided. + +=item * package_name + +The package name for the method. This will be taken from the provided +L object if it is not provided. + +=item * associated_metaclass + +An optional L object. This is the metaclass for the +method's class. =back -=head2 Modifiers +=item B<< $metamethod->get_original_method >> -These three methods will add the method modifiers to the wrapped -CODE reference. For more information on how method modifiers work, -see the section in L. +This returns the L object that was passed to the +constructor. -=over 4 +=item B<< $metamethod->add_before_modifier($code) >> + +=item B<< $metamethod->add_after_modifier($code) >> + +=item B<< $metamethod->add_around_modifier($code) >> + +These methods all take a subroutine reference and apply it as a +modifier to the original method. + +=item B<< $metamethod->before_modifiers >> -=item B +=item B<< $metamethod->after_modifiers >> -=item B +=item B<< $metamethod->around_modifiers >> -=item B +These methods all return a list of subroutine references which are +acting as the specified type of modifier. =back @@ -196,7 +235,7 @@ Stevan Little Estevan@iinteractive.comE =head1 COPYRIGHT AND LICENSE -Copyright 2006-2008 by Infinity Interactive, Inc. +Copyright 2006-2009 by Infinity Interactive, Inc. L