X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse.pm;h=dae207d7c9a7e68aa591a82c92d66912f23df771;hb=306290e864ac23e5f1692c8495b0c173081a1ebb;hp=ee5a82355cee71522d55c377928137547618863c;hpb=6caea456895ea69fd2a7307c8f56158d5d7cbcd0;p=gitmo%2FMouse.git diff --git a/lib/Mouse.pm b/lib/Mouse.pm index ee5a823..dae207d 100644 --- a/lib/Mouse.pm +++ b/lib/Mouse.pm @@ -9,8 +9,8 @@ use Sub::Exporter; use Carp 'confess'; use Scalar::Util 'blessed'; -use Mouse::Attribute; -use Mouse::Class; +use Mouse::Meta::Attribute; +use Mouse::Meta::Class; use Mouse::Object; use Mouse::TypeRegistry; @@ -19,7 +19,7 @@ do { my %exports = ( meta => sub { - my $meta = Mouse::Class->initialize($CALLER); + my $meta = Mouse::Meta::Class->initialize($CALLER); return sub { $meta }; }, @@ -37,7 +37,7 @@ do { $names = [$names] if !ref($names); for my $name (@$names) { - Mouse::Attribute->create($package, $name, @_); + Mouse::Meta::Attribute->create($package, $name, @_); } }; }, @@ -62,7 +62,7 @@ do { strict->import; warnings->import; - my $meta = Mouse::Class->initialize($CALLER); + my $meta = Mouse::Meta::Class->initialize($CALLER); $meta->superclasses('Mouse::Object') unless $meta->superclasses; @@ -83,16 +83,28 @@ do { sub load_class { my $class = shift; + return 1 if is_class_loaded($class); + (my $file = "$class.pm") =~ s{::}{/}g; eval { CORE::require($file) }; - confess "Could not load class ($class) because : $@" - if $@ - && $@ !~ /^Can't locate .*? at /; + confess "Could not load class ($class) because : $@" if $@; return 1; } +sub is_class_loaded { + my $class = shift; + + no strict 'refs'; + return 1 if defined ${"${class}::VERSION"} || defined @{"${class}::ISA"}; + foreach my $symbol (keys %{"${class}::"}) { + next if substr($symbol, -2, 2) eq '::'; + return 1 if defined &{"${class}::${symbol}"}; + } + return 0; +} + 1; __END__ @@ -137,7 +149,7 @@ Moose. =head1 INTERFACE -=head2 meta -> Mouse::Class +=head2 meta -> Mouse::Meta::Class Returns this class' metaclass instance.