X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=gitmo%2FMouse.git;a=blobdiff_plain;f=lib%2FMouse%2FMeta%2FModule.pm;h=0545f362aa12e25b437cf0f4c477dfc4e937d76d;hp=51e1a6d116fd611e74ab90984788af0cc8eff117;hb=134daa672a270f9144185a6d245085558fceb210;hpb=8e64d0fa5da64639074f77d3da9b2f7aa20cce93 diff --git a/lib/Mouse/Meta/Module.pm b/lib/Mouse/Meta/Module.pm index 51e1a6d..0545f36 100755 --- a/lib/Mouse/Meta/Module.pm +++ b/lib/Mouse/Meta/Module.pm @@ -5,7 +5,7 @@ use warnings; use Carp (); use Scalar::Util qw/blessed weaken/; -use Mouse::Util qw/get_code_info not_supported load_class/; +use Mouse::Util qw/:meta get_code_info not_supported load_class/; { my %METACLASS_CACHE; @@ -46,8 +46,6 @@ use Mouse::Util qw/get_code_info not_supported load_class/; } -sub meta{ Mouse::Meta::Class->initialize(ref $_[0] || $_[0]) } - sub _new{ Carp::croak("Mouse::Meta::Module is an abstract class") } sub name { $_[0]->{package} } @@ -81,8 +79,12 @@ sub add_method { my($self, $name, $code) = @_; if(!defined $name){ - $self->throw_error("You must pass a defined name"); + $self->throw_error('You must pass a defined name'); + } + if(!defined $code){ + $self->throw_error('You must pass a defined code'); } + if(ref($code) ne 'CODE'){ not_supported 'add_method for a method object'; } @@ -100,7 +102,7 @@ sub _code_is_mine { # taken from Class::MOP::Class my ( $code_package, $code_name ) = get_code_info($code); - return $code_package && $code_package eq $self->name + return $code_package && $code_package eq $self->{package} || ( $code_package eq 'constant' && $code_name eq '__ANON__' ); } @@ -108,7 +110,8 @@ sub has_method { my($self, $method_name) = @_; return 1 if $self->{methods}->{$method_name}; - my $code = $self->name->can($method_name); + + my $code = $self->{package}->can($method_name); return $code && $self->_code_is_mine($code); } @@ -297,6 +300,11 @@ __END__ =head1 NAME -Mouse::Meta::Module - Common base class for Mouse::Meta::Class and Mouse::Meta::Role +Mouse::Meta::Module - The base class for Mouse::Meta::Class and Mouse::Meta::Role + +=head1 SEE ALSO + +L =cut +