X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse%2FPurePerl.pm;h=94d57d888749699a97a3d49a398afe7fd874508a;hb=3b48bcc824fb6cfa90f907cf4d83e01c224a72dd;hp=a09d60609d180c0f6a172ae92b86447578e41b3f;hpb=6fffa61704e072b2248126490db2851343413d11;p=gitmo%2FMouse.git diff --git a/lib/Mouse/PurePerl.pm b/lib/Mouse/PurePerl.pm index a09d606..94d57d8 100644 --- a/lib/Mouse/PurePerl.pm +++ b/lib/Mouse/PurePerl.pm @@ -11,6 +11,19 @@ use warnings FATAL => 'redefine'; # to avoid to load Mouse::PurePerl use B (); + +# taken from Class/MOP.pm +sub is_valid_class_name { + my $class = shift; + + return 0 if ref($class); + return 0 unless defined($class); + + return 1 if $class =~ /\A \w+ (?: :: \w+ )* \z/xms; + + return 0; +} + sub is_class_loaded { my $class = shift; @@ -193,9 +206,7 @@ sub _parameterize_Maybe_for { return sub{ return !defined($_) || $check->($_); }; -}; - - +} package Mouse::Meta::Module; @@ -447,12 +458,23 @@ sub _process_options{ my $tc; if(exists $args->{isa}){ - $args->{type_constraint} = Mouse::Util::TypeConstraints::find_or_create_isa_type_constraint($args->{isa}); + $tc = $args->{type_constraint} = Mouse::Util::TypeConstraints::find_or_create_isa_type_constraint($args->{isa}); } - elsif(exists $args->{does}){ - $args->{type_constraint} = Mouse::Util::TypeConstraints::find_or_create_does_type_constraint($args->{does}); + + if(exists $args->{does}){ + if(defined $tc){ # both isa and does supplied + my $does_ok = do{ + local $@; + eval{ "$tc"->does($args) }; + }; + if(!$does_ok){ + $class->throw_error("Cannot have both an isa option and a does option because '$tc' does not do '$args->{does}' on attribute ($name)"); + } + } + else { + $tc = $args->{type_constraint} = Mouse::Util::TypeConstraints::find_or_create_does_type_constraint($args->{does}); + } } - $tc = $args->{type_constraint}; if($args->{coerce}){ defined($tc) @@ -661,7 +683,7 @@ Mouse::PurePerl - A Mouse guts in pure Perl =head1 VERSION -This document describes Mouse version 0.50_02 +This document describes Mouse version 0.50_03 =head1 SEE ALSO