update to released version
Rafael Kitover [Wed, 27 May 2009 23:55:27 +0000 (16:55 -0700)]
Changes
MANIFEST.SKIP
Makefile.PL
lib/MooseX/Types.pm
lib/MooseX/Types/Base.pm

diff --git a/Changes b/Changes
index a65fe48..cefa04c 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,3 +1,8 @@
+0.11    Sat May 23 18:02:35 PDT 2009
+        - warning on string types and unregistered class/role types
+        - better error for missing comma
+        - MooseX::Types::Combine for combining type libs
+
 0.10    Fri March 06 17:34:00 EST 2009
         - Removed unneeded debugging code from one of the tests, which was
           causing installation errors for people that didn't already have
index f414ead..3d0e937 100644 (file)
@@ -8,6 +8,7 @@
 \bCVS\b
 ,v$
 \B\.svn\b
+\B\.git\b
 
 # Avoid Makemaker generated and utility files.
 \bMakefile$
index b1026b0..1509001 100644 (file)
@@ -9,15 +9,20 @@ license         q{perl};
 author          q{Robert "phaylon" Sedlacek <rs@474.at>};
 all_from        q{lib/MooseX/Types.pm};
 
-build_requires  q{Test::More},                  0.80;
+build_requires  q{Test::More},                  '0.80';
 build_requires  q{FindBin},                     0;
 
-requires        q{Moose},                       0.61;
-requires        q{Sub::Install},                0.924;
-requires        q{namespace::clean},            0.08;
+requires        q{Moose},                       '0.61';
+requires        q{Sub::Install},                '0.924';
+requires        q{namespace::clean},            '0.08';
 requires        q{Carp},                        0;
-requires        q{Carp::Clan},                  6.00;
-requires        q{Scalar::Util},                1.19;
+requires        q{Carp::Clan},                  '6.00';
+requires        q{Scalar::Util},                '1.19';
+requires        q{Sub::Name},                   0;
+
+if (can_use('MooseX::Types::IO') && !can_use('MooseX::Types::IO', '0.03')) {
+    requires q{MooseX::Types::IO}, '0.03';
+}
 
 system 'pod2text lib/MooseX/Types.pm > README'
     if -e 'MANIFEST.SKIP';
@@ -25,3 +30,11 @@ system 'pod2text lib/MooseX/Types.pm > README'
 auto_provides;
 auto_install;
 WriteAll;
+
+if ($Module::Install::AUTHOR) {
+    Meta->{values}{requires} = [ grep {
+        $_->[0] ne 'MooseX::Types::IO'
+    } @{ Meta->{values}{requires} } ];
+
+    Meta->write;
+}
index 4dd9b56..061ad23 100644 (file)
@@ -9,15 +9,18 @@ MooseX::Types - Organise your Moose types in libraries
 
 use Moose::Util::TypeConstraints;
 use MooseX::Types::TypeDecorator;
-use MooseX::Types::Base             ();
-use MooseX::Types::Util             qw( filter_tags );
+use MooseX::Types::Base               ();
+use MooseX::Types::Util               qw( filter_tags );
 use MooseX::Types::UndefinedType;
-use Carp::Clan                      qw( ^MooseX::Types );
+use MooseX::Types::CheckedUtilExports ();
+use Carp::Clan                        qw( ^MooseX::Types );
+use Sub::Name;
+use Scalar::Util                      'reftype';
 
 use namespace::clean -except => [qw( meta )];
 
 use 5.008;
-our $VERSION = '0.10';
+our $VERSION = '0.11';
 my $UndefMsg = q{Action for type '%s' not yet defined in library '%s'};
 
 =head1 SYNOPSIS
@@ -35,7 +38,7 @@ my $UndefMsg = q{Action for type '%s' not yet defined in library '%s'};
     )];
 
   # import builtin types
-  use MooseX::Types::Moose 'Int';
+  use MooseX::Types::Moose qw/Int HashRef/;
 
   # type definition.
   subtype PositiveInt, 
@@ -70,6 +73,12 @@ my $UndefMsg = q{Action for type '%s' not yet defined in library '%s'};
   subtype StrOrArrayRef,
     as Str|ArrayRef;
 
+  class_type 'DateTime';
+
+  coerce 'DateTime',
+    from HashRef,
+    via { DateTime->new(%$_) };
+
   1;
 
 =head2 Usage
@@ -113,6 +122,9 @@ names of the types will be prefixed with the library's name.
 This module will also provide you with some helper functions to make it 
 easier to use Moose types in your code.
 
+String type names will produce a syntax error, unless it's for a C<class_type>
+or C<role_type> declared within the library.
+
 =head1 TYPE HANDLER FUNCTIONS
 
 =head2 $type
@@ -339,7 +351,12 @@ sub import {
     }
 
     # run type constraints import
-    return Moose::Util::TypeConstraints->import({ into => $callee });
+    Moose::Util::TypeConstraints->import({ into => $callee });
+
+    # override some with versions that check for syntax errors
+    MooseX::Types::CheckedUtilExports->import({ into => $callee });
+
+    1;
 }
 
 =head2 type_export_generator
@@ -357,19 +374,22 @@ sub type_export_generator {
     ## Return an anonymous subroutine that will generate the proxied type
     ## constraint for you.
     
-    return sub {
-        my $type_constraint;
+    return subname $name => sub {
+        my $type_constraint = $class->create_base_type_constraint($name);
+
         if(defined(my $params = shift @_)) {
             ## We currently only allow a TC to accept a single, ArrayRef
             ## parameter, as in HashRef[Int], where [Int] is what's inside the
             ## ArrayRef passed.
-            if(ref $params eq 'ARRAY') {
+            if(reftype $params eq 'ARRAY') {
                 $type_constraint = $class->create_arged_type_constraint($name, @$params);
+            } elsif(!defined $type_constraint) {
+                croak "Syntax error in type definition (did you forget a comma"
+                    . " after $type?)";
             } else {
-                croak 'Arguments must be an ArrayRef, not '. ref $params;
+                croak "Argument must be an ArrayRef to create a parameterized "
+                    . "type, Eg.: ${type}[Int]. Got: ".ref($params)."."
             }
-        } else {
-            $type_constraint = $class->create_base_type_constraint($name);
         }
 
         $type_constraint = defined($type_constraint) ? $type_constraint
index e7ab791..b05288d 100644 (file)
@@ -188,6 +188,90 @@ sub type_storage {
     }
 }
 
+=head2 registered_class_types
+
+Returns the class types registered within this library. Don't use directly.
+
+=cut
+
+sub registered_class_types {
+    my ($class) = @_;
+
+    {
+        no strict 'refs';
+        return \%{ $class . '::__MOOSEX_TYPELIBRARY_CLASS_TYPES' };
+    }
+}
+
+=head2 register_class_type
+
+Register a C<class_type> for use in this library by class name.
+
+=cut
+
+sub register_class_type {
+    my ($class, $type) = @_;
+
+    croak "Not a class_type"
+        unless $type->isa('Moose::Meta::TypeConstraint::Class');
+
+    $class->registered_class_types->{$type->class} = $type;
+}
+
+=head2 get_registered_class_type
+
+Get a C<class_type> registered in this library by name.
+
+=cut
+
+sub get_registered_class_type {
+    my ($class, $name) = @_;
+
+    $class->registered_class_types->{$name};
+}
+
+=head2 registered_role_types
+
+Returns the role types registered within this library. Don't use directly.
+
+=cut
+
+sub registered_role_types {
+    my ($class) = @_;
+
+    {
+        no strict 'refs';
+        return \%{ $class . '::__MOOSEX_TYPELIBRARY_ROLE_TYPES' };
+    }
+}
+
+=head2 register_role_type
+
+Register a C<role_type> for use in this library by role name.
+
+=cut
+
+sub register_role_type {
+    my ($class, $type) = @_;
+
+    croak "Not a role_type"
+        unless $type->isa('Moose::Meta::TypeConstraint::Role');
+
+    $class->registered_role_types->{$type->role} = $type;
+}
+
+=head2 get_registered_role_type
+
+Get a C<role_type> registered in this library by role name.
+
+=cut
+
+sub get_registered_role_type {
+    my ($class, $name) = @_;
+
+    $class->registered_role_types->{$name};
+}
+
 =head1 SEE ALSO
 
 L<MooseX::Types::Moose>