X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FTypes%2FParameterizable.pm;fp=lib%2FMooseX%2FTypes%2FParameterizable.pm;h=b75924bce896860f250a9890396d21915c3dad58;hb=afdaaf5243063b5bb9230df03bf07aad5c71207a;hp=861773b286a63666b3aaabcf4a5e813a69db228c;hpb=94aff721074fb1c94b821d613e611f2a31a215d6;p=gitmo%2FMooseX-Dependent.git diff --git a/lib/MooseX/Types/Parameterizable.pm b/lib/MooseX/Types/Parameterizable.pm index 861773b..b75924b 100644 --- a/lib/MooseX/Types/Parameterizable.pm +++ b/lib/MooseX/Types/Parameterizable.pm @@ -17,36 +17,53 @@ MooseX::Types::Parameterizable - Create your own Parameterizable Types. The follow is example usage. + package Test::MooseX::Types::Parameterizable::Synopsis; + use Moose; use MooseX::Types::Parameterizable qw(Parameterizable); - use MooseX::Types::Moose qw(Str Int); + use MooseX::Types::Moose qw(Str Int ArrayRef); use MooseX::Types -declare=>[qw(Varchar)]; + ## Create a type constraint that is a string but parameterizes an integer + ## that is used as a maximum length constraint on that string, similar to + ## an SQL Varchar type. + subtype Varchar, as Parameterizable[Str,Int], where { my($string, $int) = @_; $int >= length($string) ? 1:0; }, - message { - "'$_' is too long" + message { "'$_' is too long" }; + + coerce Varchar, + from ArrayRef, + via { + my ($arrayref, $int) = @_; + join('', @$arrayref); }; - has varchar_five => (isa=>Varchar[5], is=>'ro'); - has varchar_ten => (isa=>Varchar[10], is=>'ro'); + has 'varchar_five' => (isa=>Varchar[5], is=>'ro', coerce=>1); + has 'varchar_ten' => (isa=>Varchar[10], is=>'ro'); - ## This works fine + ## Object created since attributes are valid my $object1 = __PACKAGE__->new( varchar_five => '1234', varchar_ten => '123456789', ); - ## This explodes with a type constraint error + ## Dies with an invalid constraint for 'varchar_five' my $object2 = __PACKAGE__->new( - varchar_five => '12345678', ## Too long string + varchar_five => '12345678', varchar_ten => '123456789', ); + ## varchar_five coerces as expected + my $object3 = __PACKAGE__->new( + varchar_five => [qw/aa bb/], + varchar_ten => '123456789', + ); + See t/05-pod-examples.t for runnable versions of all POD code =head1 DESCRIPTION