X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=gitmo%2FMouse.git;a=blobdiff_plain;f=lib%2FMouse%2FUtil%2FTypeConstraints.pm;h=808bb6b8def12625e695f0b5319f9656b8c6d28d;hp=b27d94620ebe0dd7cc87b8d157f2a5cccefd28dd;hb=9abaecfdec4e3ee1c8fae217b029a692155385a3;hpb=b0d52f035ebf10fd15a1ac8a8f0c6149e52af800 diff --git a/lib/Mouse/Util/TypeConstraints.pm b/lib/Mouse/Util/TypeConstraints.pm index b27d946..808bb6b 100644 --- a/lib/Mouse/Util/TypeConstraints.pm +++ b/lib/Mouse/Util/TypeConstraints.pm @@ -1,12 +1,12 @@ package Mouse::Util::TypeConstraints; use Mouse::Util; # enables strict and warnings -use Carp (); -use Scalar::Util (); - use Mouse::Meta::TypeConstraint; use Mouse::Exporter; +use Carp (); +use Scalar::Util (); + Mouse::Exporter->setup_import_methods( as_is => [qw( as where message optimize_as @@ -66,7 +66,6 @@ my @builtins = ( RoleName => 'ClassName', \&RoleName, ); - while (my ($name, $parent, $code) = splice @builtins, 0, 3) { $TYPE{$name} = Mouse::Meta::TypeConstraint->new( name => $name, @@ -75,14 +74,12 @@ while (my ($name, $parent, $code) = splice @builtins, 0, 3) { ); } -# make it parametarizable - +# parametarizable types $TYPE{Maybe} {constraint_generator} = \&_parameterize_Maybe_for; $TYPE{ArrayRef}{constraint_generator} = \&_parameterize_ArrayRef_for; $TYPE{HashRef} {constraint_generator} = \&_parameterize_HashRef_for; # sugars - sub as ($) { (as => $_[0]) } ## no critic sub where (&) { (where => $_[0]) } ## no critic sub message (&) { (message => $_[0]) } ## no critic @@ -101,7 +98,6 @@ sub optimized_constraints { # DEPRECATED undef @builtins; # free the allocated memory @builtins = keys %TYPE; # reuse it sub list_all_builtin_type_constraints { @builtins } - sub list_all_type_constraints { keys %TYPE } sub _define_type { @@ -149,7 +145,7 @@ sub _define_type { } } - if($TYPE{$name}){ + if(defined $TYPE{$name}){ my $that = $TYPE{$name}->{package_defined_in} || __PACKAGE__; if($this ne $that) { my $note = ''; @@ -187,9 +183,8 @@ sub subtype { return _define_type 1, @_; } -sub coerce { +sub coerce { # coerce $type, from $from, via { ... }, ... my $type_name = shift; - my $type = find_type_constraint($type_name) or Carp::croak("Cannot find type '$type_name', perhaps you forgot to load it."); @@ -202,7 +197,7 @@ sub class_type { my $class = $options->{class} || $name; # ClassType - return _define_type 1, $name => ( + return subtype $name => ( as => 'Object', optimized_as => Mouse::Util::generate_isa_predicate_for($class), class => $class, @@ -214,7 +209,7 @@ sub role_type { my $role = $options->{role} || $name; # RoleType - return _define_type 1, $name => ( + return subtype $name => ( as => 'Object', optimized_as => sub { return Scalar::Util::blessed($_[0]) @@ -432,7 +427,7 @@ Mouse::Util::TypeConstraints - Type constraint system for Mouse =head1 VERSION -This document describes Mouse version 0.73 +This document describes Mouse version 0.76 =head2 SYNOPSIS