+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
\bCVS\b
,v$
\B\.svn\b
+\B\.git\b
# Avoid Makemaker generated and utility files.
\bMakefile$
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';
auto_provides;
auto_install;
WriteAll;
+
+if ($Module::Install::AUTHOR) {
+ Meta->{values}{requires} = [ grep {
+ $_->[0] ne 'MooseX::Types::IO'
+ } @{ Meta->{values}{requires} } ];
+
+ Meta->write;
+}
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
)];
# import builtin types
- use MooseX::Types::Moose 'Int';
+ use MooseX::Types::Moose qw/Int HashRef/;
# type definition.
subtype PositiveInt,
subtype StrOrArrayRef,
as Str|ArrayRef;
+ class_type 'DateTime';
+
+ coerce 'DateTime',
+ from HashRef,
+ via { DateTime->new(%$_) };
+
1;
=head2 Usage
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
}
# 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
## 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
}
}
+=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>