X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse.pm;h=4f6e8f9647be01592d3ccf3b3f3be1dfa27a8f4e;hb=6cfa1e5e70616fb102915489c02d8347ffa912fb;hp=98d19e568f6e12893c5b614953df10a798bd26b4;hpb=3a63a2e7ef8fbac5f61eab04baecbf5d19374b83;p=gitmo%2FMouse.git diff --git a/lib/Mouse.pm b/lib/Mouse.pm index 98d19e5..4f6e8f9 100644 --- a/lib/Mouse.pm +++ b/lib/Mouse.pm @@ -8,9 +8,10 @@ our $VERSION = '0.30'; use Carp 'confess'; use Scalar::Util 'blessed'; -use Mouse::Util; +use Mouse::Util qw(load_class is_class_loaded); use Mouse::Meta::Attribute; +use Mouse::Meta::Module; # class_of() use Mouse::Meta::Class; use Mouse::Object; use Mouse::Util::TypeConstraints; @@ -188,59 +189,6 @@ sub unimport { } } -sub load_class { - my $class = shift; - - if (ref($class) || !defined($class) || !length($class)) { - my $display = defined($class) ? $class : 'undef'; - confess "Invalid class name ($display)"; - } - - return 1 if $class eq 'Mouse::Object'; - 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 $@; - - return 1; -} - -sub is_class_loaded { - my $class = shift; - - return 0 if ref($class) || !defined($class) || !length($class); - - # walk the symbol table tree to avoid autovififying - # \*{${main::}{"Foo::"}} == \*main::Foo:: - - my $pack = \*::; - foreach my $part (split('::', $class)) { - return 0 unless exists ${$$pack}{"${part}::"}; - $pack = \*{${$$pack}{"${part}::"}}; - } - - # check for $VERSION or @ISA - return 1 if exists ${$$pack}{VERSION} - && defined *{${$$pack}{VERSION}}{SCALAR}; - return 1 if exists ${$$pack}{ISA} - && defined *{${$$pack}{ISA}}{ARRAY}; - - # check for any method - foreach ( keys %{$$pack} ) { - next if substr($_, -2, 2) eq '::'; - return 1 if defined *{${$$pack}{$_}}{CODE}; - } - - # fail - return 0; -} - -sub class_of { - return Mouse::Meta::Class::class_of($_[0]); -} - 1; __END__