- moved the ->parameterize tests to own test suite
[gitmo/Moose.git] / lib / Moose / Meta / TypeConstraint / Parameterizable.pm
index 04b4307..4fdfbe6 100644 (file)
@@ -4,11 +4,13 @@ use strict;
 use warnings;
 use metaclass;
 
-our $VERSION   = '0.55_03';
+our $VERSION   = '0.57';
 $VERSION = eval $VERSION;
 our $AUTHORITY = 'cpan:STEVAN';
 
 use base 'Moose::Meta::TypeConstraint';
+use Moose::Meta::TypeConstraint::Parameterized;
+use Moose::Util::TypeConstraints ();
 
 __PACKAGE__->meta->add_attribute('constraint_generator' => (
     accessor  => 'constraint_generator',
@@ -40,6 +42,26 @@ sub _can_coerce_constraint_from {
     };
 }
 
+sub parse_parameter_str {
+    my ($self, $type_str) = @_;
+    return Moose::Util::TypeConstraints::find_or_create_isa_type_constraint($type_str);
+}
+
+sub parameterize {
+       my ($self, $contained_tc) = @_;
+
+       if($contained_tc->isa('Moose::Meta::TypeConstraint')) {
+        my $tc_name = $self->name .'['. $contained_tc->name .']';        
+        return Moose::Meta::TypeConstraint::Parameterized->new(
+            name           => $tc_name,
+            parent         => $self,
+            type_parameter => $contained_tc,
+        );                     
+       } else {
+        Moose->throw_error("The type parameter must be a Moose meta type");
+    }
+}
+
 
 1;
 
@@ -62,6 +84,14 @@ Moose::Meta::TypeConstraint::Parameterizable - Higher Order type constraints for
 
 =item B<generate_constraint_for>
 
+=item B<parse_parameter_str>
+
+Given a string, convert it to a Perl structure.
+
+=item B<parameterize>
+
+Given an array of type constraints, parameterize the current type constraint.
+
 =item B<meta>
 
 =back