Implemented Moose::Object::does, borrowing from Moose::Object.
Nick Woolley [Fri, 27 Mar 2009 14:42:22 +0000 (14:42 +0000)]
lib/Mouse/Object.pm

index d729261..079aa80 100644 (file)
@@ -120,6 +120,20 @@ sub dump {
     Data::Dumper::Dumper $self;
 }
 
+
+sub does {
+    my ($self, $role_name) = @_;
+    (defined $role_name)
+        || confess "You must supply a role name to does()";
+    my $meta = $self->meta;
+    foreach my $class ($meta->linearized_isa) {
+        my $m = $meta->initialize($class);
+        return 1 
+            if $m->can('does_role') && $m->does_role($role_name);            
+    }
+    return 0;   
+};
+
 1;
 
 __END__
@@ -160,6 +174,12 @@ You may put any business logic deinitialization in DEMOLISH methods. You don't
 need to redispatch or return any specific value.
 
 
+=head2 does $role_name
+
+This will check if the invocant's class "does" a given C<$role_name>.
+This is similar to "isa" for object, but it checks the roles instead.
+
+
 =head2 B<dump ($maxdepth)>
 
 From the Moose POD: