summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2009-05-27 21:34:34 -0500
committerJesse Luehrs <doy@tozt.net>2009-05-27 21:34:34 -0500
commit3ea9215fff432fe798553b8b04352147aa68930c (patch)
tree75898889cb1d38654992156458a1dcae061e9809
downloadmoosex-mangle-3ea9215fff432fe798553b8b04352147aa68930c.tar.gz
moosex-mangle-3ea9215fff432fe798553b8b04352147aa68930c.zip
initial implementation
-rw-r--r--lib/MooseX/Mangle.pm39
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;