X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse%2FMeta%2FClass.pm;h=3f9c54c28abf1ff074573c1d596783705c11c62e;hb=45f2e6a79a018ba03e0103272ab2830ee2efa783;hp=67d012e335b276e2734d058dca3ac5af9664cebd;hpb=fc1d8369f17d2d6a06ecdcb13199e1d4ecb2e53f;p=gitmo%2FMouse.git diff --git a/lib/Mouse/Meta/Class.pm b/lib/Mouse/Meta/Class.pm index 67d012e..3f9c54c 100644 --- a/lib/Mouse/Meta/Class.pm +++ b/lib/Mouse/Meta/Class.pm @@ -4,6 +4,7 @@ use strict; use warnings; use Mouse::Meta::Method::Constructor; +use Mouse::Meta::Method::Destructor; use Mouse::Util qw/get_linear_isa blessed/; use Carp 'confess'; @@ -36,6 +37,7 @@ sub new { no strict 'refs'; \@{ $args{name} . '::ISA' }; }; + $args{roles} ||= []; bless \%args, $class; } @@ -143,7 +145,8 @@ sub make_immutable { my $name = $self->name; $self->{is_immutable}++; no strict 'refs'; - *{"$name\::new"} = Mouse::Meta::Method::Constructor->generate_constructor_method_inline( $self ); + *{"$name\::new"} = Mouse::Meta::Method::Constructor->generate_constructor_method_inline( $self ); + *{"$name\::DESTROY"} = Mouse::Meta::Method::Destructor->generate_destructor_method_inline( $self ); } sub make_mutable { Carp::croak "Mouse::Meta::Class->make_mutable does not supported by Mouse"; @@ -185,6 +188,18 @@ sub add_after_method_modifier { ); } +sub roles { $_[0]->{roles} } + +sub does_role { + my ($self, $role_name) = @_; + (defined $role_name) + || confess "You must supply a role name to look for"; + for my $role (@{ $self->{roles} }) { + return 1 if $role->name eq $role_name; + } + return 0; +} + 1; __END__