summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/MooseX/Mangle.pm16
1 files changed, 15 insertions, 1 deletions
diff --git a/lib/MooseX/Mangle.pm b/lib/MooseX/Mangle.pm
index b7c155c..9e1087f 100644
--- a/lib/MooseX/Mangle.pm
+++ b/lib/MooseX/Mangle.pm
@@ -95,8 +95,22 @@ sub mangle_return {
});
}
+sub guard {
+ 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 ($self->$code(@_)) {
+ return $self->$orig(@_);
+ }
+ return;
+ });
+}
+
Moose::Exporter->setup_import_methods(
- with_caller => [qw(mangle_args mangle_return)],
+ with_caller => [qw(mangle_args mangle_return guard)],
);
=head1 BUGS