X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse%2FObject.pm;h=bac4fa03fae405122f2f61d7ae715c4462e5a5d2;hb=c9aefe2628c559c55abe2ddc8de6c92a5d9dbbaf;hp=d729261699bd632ac19fa2850f4822ec307f0866;hpb=df963a63491f0c26a26592d51534d5d440bc6f26;p=gitmo%2FMouse.git diff --git a/lib/Mouse/Object.pm b/lib/Mouse/Object.pm index d729261..bac4fa0 100644 --- a/lib/Mouse/Object.pm +++ b/lib/Mouse/Object.pm @@ -27,7 +27,7 @@ sub new { if ref($instance->{$key}) && $attribute->is_weak_ref; if ($attribute->has_trigger) { - $attribute->trigger->($instance, $args->{$from}, $attribute); + $attribute->trigger->($instance, $args->{$from}); } } else { @@ -68,13 +68,9 @@ sub BUILDARGS { my $class = shift; if (scalar @_ == 1) { - if (defined $_[0]) { - (ref($_[0]) eq 'HASH') - || confess "Single parameters to new() must be a HASH ref"; - return {%{$_[0]}}; - } else { - return {}; - } + (ref($_[0]) eq 'HASH') + || confess "Single parameters to new() must be a HASH ref"; + return {%{$_[0]}}; } else { return {@_}; @@ -120,6 +116,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 +170,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 From the Moose POD: