diff options
author | Jesse Luehrs <doy@tozt.net> | 2009-05-27 21:34:34 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2009-05-27 21:34:34 -0500 |
commit | 3ea9215fff432fe798553b8b04352147aa68930c (patch) | |
tree | 75898889cb1d38654992156458a1dcae061e9809 | |
download | moosex-mangle-3ea9215fff432fe798553b8b04352147aa68930c.tar.gz moosex-mangle-3ea9215fff432fe798553b8b04352147aa68930c.zip |
initial implementation
-rw-r--r-- | lib/MooseX/Mangle.pm | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/MooseX/Mangle.pm b/lib/MooseX/Mangle.pm new file mode 100644 index 0000000..c555a6a --- /dev/null +++ b/lib/MooseX/Mangle.pm @@ -0,0 +1,39 @@ +package MooseX::Mangle; +use Moose (); +use Moose::Exporter; + +sub mangle_args { + my $caller = shift; + my ($method_name, $code) = @_; + my $meta = Class::MOP::class_of($caller); + $meta->add_around_method_modifier($method_name => sub { + my $orig = shift; + my $self = shift; + my @args = $self->$code(@_); + return $self->$orig(@args); + }); +} + +sub mangle_return { + my $caller = shift; + my ($method_name, $code) = @_; + my $meta = Class::MOP::class_of($caller); + $meta->add_around_method_modifier($method_name => sub { + my $orig = shift; + my $self = shift; + if (wantarray) { + my @ret = $self->$orig(@_); + return $self->$code(@ret); + } + else { + my $ret = $self->$orig(@_); + return $self->$code($ret); + } + }); +} + +Moose::Exporter->setup_import_methods( + with_caller => [qw(mangle_args mangle_return)], +); + +1; |