first go at some test cases and basic implementation
John Napiorkowski [Thu, 11 Sep 2008 03:30:57 +0000 (03:30 +0000)]
lib/Moose/Meta/TypeConstraint/Parameterizable.pm
t/040_type_constraints/010_misc_type_tests.t

index 95193eb..530f026 100644 (file)
@@ -9,6 +9,7 @@ $VERSION = eval $VERSION;
 our $AUTHORITY = 'cpan:STEVAN';
 
 use base 'Moose::Meta::TypeConstraint';
+use Moose::Meta::TypeConstraint::Parameterized;
 
 __PACKAGE__->meta->add_attribute('constraint_generator' => (
     accessor  => 'constraint_generator',
@@ -40,6 +41,24 @@ sub _can_coerce_constraint_from {
     };
 }
 
+sub parameterize {
+       my ($self, $args) = @_;
+       
+       unless(ref $args eq 'ARRAY') {
+                 Moose->throw_error(
+                       "The type constraint ".$self->name." requires it's argument to be an ArrayRef"
+               );
+       }
+       
+       my $contained_tc = find_or_create_isa_type_constraint($args->[0]);
+       
+    return Moose::Meta::TypeConstraint::Parameterized->new(
+        name           => $self->name .'['.$contained_tc->name.']',
+        parent         => $self,
+        type_parameter => find_or_create_isa_type_constraint($contained_tc),
+    ); 
+}
+
 
 1;
 
index 779bcf3..adbd0db 100644 (file)
@@ -47,3 +47,18 @@ ok $subtype1 => 'made a subtype from our type object';
 my $subtype2 = subtype 'New2' => as $subtype1;
 
 ok $subtype2 => 'made a subtype of our subtype';
+
+# testing the parameterize method
+
+{
+       package Test::Moose::Meta::TypeConstraint::Parameterizable;
+       
+       use Moose;
+       use Moose::Util::TypeConstraints;
+       
+       my $parameterizable = subtype 'parameterizable_hashref',
+               as 'HashRef';
+               
+       my $parameterized = subtype 'parameterized_hashref',
+               as 'HashRef[Int]';
+}
\ No newline at end of file