openhandle
[gitmo/Mouse.git] / lib / Mouse / TypeRegistry.pm
index 9c18bd2..1aef7a8 100644 (file)
@@ -2,7 +2,8 @@
 package Mouse::TypeRegistry;
 use strict;
 use warnings;
-use Scalar::Util qw/looks_like_number blessed openhandle/;
+
+use Mouse::Util qw/blessed looks_like_number openhandle/;
 
 no warnings 'uninitialized';
 sub optimized_constraints {
@@ -18,6 +19,7 @@ sub optimized_constraints {
         Num        => sub { !ref($_) && looks_like_number($_) },
         Int        => sub { defined($_) && !ref($_) && /^-?[0-9]+$/ },
         Str        => sub { defined($_) && !ref($_) },
+        ClassName  => sub { Mouse::is_class_loaded($_) },
         Ref        => sub { ref($_) },
 
         ScalarRef  => sub { ref($_) eq 'SCALAR' },
@@ -36,37 +38,23 @@ sub optimized_constraints {
         },
 
         Object     => sub { blessed($_) && blessed($_) ne 'Regexp' },
+    };
+}
 
-        ClassName  => sub {
-            return if ref($_);
-            return unless defined($_) && length($_);
+1;
 
-            # walk the symbol table tree to avoid autovififying
-            # \*{${main::}{"Foo::"}} == \*main::Foo::
+__END__
 
-            my $pack = \*::;
-            foreach my $part (split('::', $_)) {
-                return unless exists ${$$pack}{"${part}::"};
-                $pack = \*{${$$pack}{"${part}::"}};
-            }
+=head1 NAME
 
-            # 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};
+Mouse::TypeRegistry - simple type constraints
 
-            # check for any method
-            foreach ( keys %{$$pack} ) {
-                next if substr($_, -2, 2) eq '::';
-                return 1 if defined *{${$$pack}{$_}}{CODE};
-            }
+=head1 METHODS
 
-            # fail
-            return;
-        },
-    };
-}
+=head2 optimized_constraints -> HashRef[CODE]
+
+Returns the simple type constraints that Mouse understands.
+
+=cut
 
-1;