bump version to 0.65
[gitmo/Moose.git] / lib / Moose / Meta / TypeConstraint / Parameterizable.pm
index 7b61ebb..e12ada3 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use warnings;
 use metaclass;
 
-our $VERSION   = '0.57';
+our $VERSION   = '0.65';
 $VERSION = eval $VERSION;
 our $AUTHORITY = 'cpan:STEVAN';
 
@@ -42,13 +42,25 @@ sub _can_coerce_constraint_from {
     };
 }
 
-sub parse_type_parameter {
+sub _parse_type_parameter {
     my ($self, $type_parameter) = @_;
     return Moose::Util::TypeConstraints::find_or_create_isa_type_constraint($type_parameter);
 }
 
 sub parameterize {
-    my ( $self, $contained_tc ) = @_;
+    my ($self, $type_parameter) = @_;
+
+    my $contained_tc = $self->_parse_type_parameter($type_parameter);
+    
+    ## The type parameter should be a subtype of the parent's type parameter
+    ## if there is one.
+    
+    if(my $parent = $self->parent) {
+        if($parent->can('type_parameter')) {
+            $contained_tc->is_a_type_of($parent->type_parameter)
+             || Moose->throw_error("$type_parameter is not a subtype of ".$parent->type_parameter);
+        }
+    }
 
     if ( $contained_tc->isa('Moose::Meta::TypeConstraint') ) {
         my $tc_name = $self->name . '[' . $contained_tc->name . ']';
@@ -85,13 +97,10 @@ Moose::Meta::TypeConstraint::Parameterizable - Higher Order type constraints for
 
 =item B<generate_constraint_for>
 
-=item B<parse_type_parameter>
-
-Given a string, convert it to a Perl structure.
-
 =item B<parameterize>
 
-Given an array of type constraints, parameterize the current type constraint.
+Given a single type constraint or type constraint string, this method
+parameterizes the type based on the given argument.
 
 =item B<meta>