X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FTypes.pm;h=33f26d731c05294895ca2fbbb1b7ed23d67dd65f;hb=19fc6ead4a6a8ab39892d70b7a6d1a32392ee720;hp=b3d6cc25dc5eda4de8e76d05a7e87ed3760d4968;hpb=886c0eaa118680edd9b4d08009dc6af42c2fd07b;p=gitmo%2FMooseX-Types.git diff --git a/lib/MooseX/Types.pm b/lib/MooseX/Types.pm index b3d6cc2..33f26d7 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.15'; +our $VERSION = '0.19'; 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(%$_) }; @@ -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.