X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse%2FTypeRegistry.pm;h=c5ce7ed133e53ad537d59718dac8246025ec51d6;hb=6cbacbf68a2e6c28c8a41ae5322e614485b22aeb;hp=3e63cec48fa45331fcbbb823704206484d069b38;hpb=d60c78b9772dafa6db7fa579e94a2f190954aac3;p=gitmo%2FMouse.git diff --git a/lib/Mouse/TypeRegistry.pm b/lib/Mouse/TypeRegistry.pm index 3e63cec..c5ce7ed 100644 --- a/lib/Mouse/TypeRegistry.pm +++ b/lib/Mouse/TypeRegistry.pm @@ -2,7 +2,9 @@ package Mouse::TypeRegistry; use strict; use warnings; +use Scalar::Util qw/looks_like_number blessed openhandle/; +no warnings 'uninitialized'; sub optimized_constraints { return { Any => sub { 1 }, @@ -10,24 +12,48 @@ sub optimized_constraints { Bool => sub { !defined($_) || $_ eq "" || "$_" eq '1' || "$_" eq '0' }, - Undef => sub { 1 }, - Defined => sub { 1 }, - Value => sub { 1 }, - Num => sub { 1 }, - Int => sub { 1 }, - Str => sub { 1 }, - ClassName => sub { 1 }, - Ref => sub { 1 }, - ScalarRef => sub { 1 }, - ArrayRef => sub { 1 }, - HashRef => sub { 1 }, - CodeRef => sub { 1 }, - RegexpRef => sub { 1 }, - GlobRef => sub { 1 }, - FileHandle => sub { 1 }, - Object => sub { 1 }, + Undef => sub { !defined($_) }, + Defined => sub { defined($_) }, + Value => sub { defined($_) && !ref($_) }, + 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' }, + ArrayRef => sub { ref($_) eq 'ARRAY' }, + HashRef => sub { ref($_) eq 'HASH' }, + CodeRef => sub { ref($_) eq 'CODE' }, + RegexpRef => sub { ref($_) eq 'Regexp' }, + GlobRef => sub { ref($_) eq 'GLOB' }, + + FileHandle => sub { + ref($_) eq 'GLOB' + && openhandle($_) + or + blessed($_) + && $_->isa("IO::Handle") + }, + + Object => sub { blessed($_) && blessed($_) ne 'Regexp' }, }; } 1; +__END__ + +=head1 NAME + +Mouse::TypeRegistry - simple type constraints + +=head1 METHODS + +=head2 optimized_constraints -> HashRef[CODE] + +Returns the simple type constraints that Mouse understands. + +=cut + +