summary refs log tree commit diff
path: root/lib/MooseX/Privacy/Meta/Method/Protected.pm
diff options
context:
space:
mode:
authorfranck cuny <franck@lumberjaph.net>2010-02-10 14:10:29 +0100
committerfranck cuny <franck@lumberjaph.net>2010-02-10 14:10:29 +0100
commit747d1c90e721d4d2632a4ee9529e820586a29d79 (patch)
tree2b4f974c5bb5ede4ff5d243443bce7fc405ac00f /lib/MooseX/Privacy/Meta/Method/Protected.pm
parentmeta class, with private and protected roles (diff)
downloadmoosex-privacy-747d1c90e721d4d2632a4ee9529e820586a29d79.tar.gz
generate private and protected methods
Diffstat (limited to 'lib/MooseX/Privacy/Meta/Method/Protected.pm')
-rw-r--r--lib/MooseX/Privacy/Meta/Method/Protected.pm29
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/MooseX/Privacy/Meta/Method/Protected.pm b/lib/MooseX/Privacy/Meta/Method/Protected.pm
new file mode 100644
index 0000000..3d4b88a
--- /dev/null
+++ b/lib/MooseX/Privacy/Meta/Method/Protected.pm
@@ -0,0 +1,29 @@
+package MooseX::Privacy::Meta::Method::Protected;
+
+use Moose;
+extends 'Moose::Meta::Method';
+
+use Carp;
+
+sub new {
+    my $class = shift;
+    my %args  = @_;
+
+    my $method         = delete $args{body};
+    my $protected_code = sub {
+        my $caller = caller();
+        croak "The "
+            . $args{package_name} . "::"
+            . $args{name}
+            . " name method is private"
+            unless $caller eq $args{package_name}
+                || $caller->isa( $args{package_name} );
+
+        goto &{$method};
+    };
+    $args{body} = $protected_code;
+    $class->SUPER::wrap(%args);
+}
+
+1;
+