X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FTypes.pm;h=4a39855c3d7d1e5215acc06adfcf630d2e2a2999;hb=e50bf0d982a7e75adb8106c092080d06cee427c3;hp=1743a1e1d33919e1d73aef18a6cb8a2f3ae8a69d;hpb=eba488057d3ede0558f415202c0f5d6cfac4a9a1;p=gitmo%2FMooseX-Types.git diff --git a/lib/MooseX/Types.pm b/lib/MooseX/Types.pm index 1743a1e..4a39855 100644 --- a/lib/MooseX/Types.pm +++ b/lib/MooseX/Types.pm @@ -7,9 +7,6 @@ MooseX::Types - Organise your Moose types in libraries =cut -#use warnings; -#use strict; - use Moose::Util::TypeConstraints; use MooseX::Types::TypeDecorator; use MooseX::Types::Base (); @@ -20,7 +17,7 @@ use Carp::Clan qw( ^MooseX::Types ); use namespace::clean -except => [qw( meta )]; use 5.008; -our $VERSION = 0.07; +our $VERSION = 0.10; my $UndefMsg = q{Action for type '%s' not yet defined in library '%s'}; =head1 SYNOPSIS @@ -263,6 +260,21 @@ The fully qualified name of this type as L knows it. A message that will be thrown when type functionality is used but the type does not yet exist. +=head1 RECURSIVE SUBTYPES + +As of version 0.08, L has experimental support for Recursive +subtypes. This will allow: + + subtype Tree() => as HashRef[Str|Tree]; + +Which validates things like: + + {key=>'value'}; + {key=>{subkey1=>'value', subkey2=>'value'}} + +And so on. This feature is new and there may be lurking bugs so don't be afraid +to hunt me down with patches and test cases if you have trouble. + =head1 NOTES REGARDING TYPE UNIONS L uses L to do some overloading @@ -357,6 +369,7 @@ sub type_export_generator { } else { $type_constraint = $class->create_base_type_constraint($name); } + $type_constraint = defined($type_constraint) ? $type_constraint : MooseX::Types::UndefinedType->new($name); @@ -481,6 +494,42 @@ documention and examples nearly uniformly use the '=>' version of the comma operator and this could be an issue if you are converting code. Patches welcome for discussion. + +=head2 Compatibility with Sub::Exporter + +If you want to use L with a Type Library, you need to make sure +you export all the type constraints declared AS WELL AS any additional export +targets. For example if you do: + + package TypeAndSubExporter; { + + use MooseX::Types::Moose qw(Str); + use MooseX::Types -declare => [qw(MyStr)]; + use Sub::Exporter -setup => { exports => [ qw(something) ] }; + + subtype MyStr, + as Str; + + sub something { + return 1; + } + + } 1; + + package Foo; { + use TypeAndSubExporter qw(MyStr); + } 1; + +You'll get a '"MyStr" is not exported by the TypeAndSubExporter module' error. +Upi can workaround by: + + - use Sub::Exporter -setup => { exports => [ qw(something) ] }; + + use Sub::Exporter -setup => { exports => [ qw(something MyStr) ] }; + +This is a workaround and I am exploring how to make these modules work better +together. I realize this workaround will lead a lot of duplication in your +export declarations and will be onerous for large type libraries. Patches and +detailed test cases welcome. See the tests directory for a start on this. =head1 SEE ALSO