X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FTypes.pm;h=e3f9a31796d07409a76d63ce71c08c0a1a4f9b86;hb=12a9b8fe4f08bc0a7785831c34a27bb45f5bb8fb;hp=a08fb6cd1c42045118e19a869bfcda23f98d0ceb;hpb=6beeae32a0ea8a03251ef0f321985687452e8f79;p=gitmo%2FMooseX-Types.git diff --git a/lib/MooseX/Types.pm b/lib/MooseX/Types.pm index a08fb6c..e3f9a31 100644 --- a/lib/MooseX/Types.pm +++ b/lib/MooseX/Types.pm @@ -20,7 +20,7 @@ use Scalar::Util 'reftype'; use namespace::clean -except => [qw( meta )]; use 5.008; -our $VERSION = '0.11'; +our $VERSION = '0.20'; my $UndefMsg = q{Action for type '%s' not yet defined in library '%s'}; =head1 SYNOPSIS @@ -35,6 +35,7 @@ my $UndefMsg = q{Action for type '%s' not yet defined in library '%s'}; PositiveInt NegativeInt ArrayRefOfPositiveInt ArrayRefOfAtLeastThreeNegativeInts LotsOfInnerConstraints StrOrArrayRef + MyDateTime )]; # import builtin types @@ -73,9 +74,15 @@ my $UndefMsg = q{Action for type '%s' not yet defined in library '%s'}; subtype StrOrArrayRef, as Str|ArrayRef; + # class types + class_type 'DateTime'; - coerce 'DateTime', + # or better + + class_type MyDateTime, { class => 'DateTime' }; + + coerce MyDateTime, from HashRef, via { DateTime->new(%$_) }; @@ -374,8 +381,8 @@ sub type_export_generator { ## Return an anonymous subroutine that will generate the proxied type ## constraint for you. - - return subname $name => sub { + + return subname "__TYPE__::$name" => sub { my $type_constraint = $class->create_base_type_constraint($name); if(defined(my $params = shift @_)) { @@ -420,7 +427,18 @@ it with @args. sub create_arged_type_constraint { my ($class, $name, @args) = @_; my $type_constraint = Moose::Util::TypeConstraints::find_or_create_type_constraint("$name"); - return $type_constraint->parameterize(@args); + my $parameterized = $type_constraint->parameterize(@args); + # It's obnoxious to have to parameterize before looking for the TC, but the + # alternative is to hard-code the assumption that the name is + # "$name[$args[0]]", which would be worse. + # This breaks MXMS, unfortunately, which relies on things like Tuple[...] + # creating new type objects each time. + # if (my $existing = + # Moose::Util::TypeConstraints::find_type_constraint($parameterized->name)) { + # return $existing; + # } + # Moose::Util::TypeConstraints::register_type_constraint($parameterized); + return $parameterized; } =head2 create_base_type_constraint ($name) @@ -561,14 +579,27 @@ L, L, L -=head1 AUTHOR AND COPYRIGHT +=head1 ACKNOWLEDGEMENTS + +Many thanks to the C<#moose> cabal on C. + +=head1 AUTHOR + +Robert "phaylon" Sedlacek + +=head1 CONTRIBUTORS + +jnapiorkowski: John Napiorkowski + +caelum: Rafael Kitover + +rafl: Florian Ragwitz -Robert 'phaylon' Sedlacek Crs@474.atE>, with many thanks to -the C<#moose> cabal on C. +hdp: Hans Dieter Pearcey -Additional features by John Napiorkowski (jnapiorkowski) . +=head1 COPYRIGHT & LICENSE -=head1 LICENSE +Copyright (c) 2007-2009 Robert Sedlacek This program is free software; you can redistribute it and/or modify it under the same terms as perl itself.