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;
my %exports = (
meta => sub {
- my $meta = Mouse::Class->initialize($CALLER);
+ my $meta = Mouse::Meta::Class->initialize($CALLER);
return sub { $meta };
},
$names = [$names] if !ref($names);
for my $name (@$names) {
- Mouse::Attribute->create($package, $name, @_);
+ Mouse::Meta::Attribute->create($package, $name, @_);
}
};
},
strict->import;
warnings->import;
- my $meta = Mouse::Class->initialize($CALLER);
+ my $meta = Mouse::Meta::Class->initialize($CALLER);
$meta->superclasses('Mouse::Object')
unless $meta->superclasses;
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__
=head1 INTERFACE
-=head2 meta -> Mouse::Class
+=head2 meta -> Mouse::Meta::Class
Returns this class' metaclass instance.