build_requires q{Test::More}, '0.80';
build_requires q{FindBin}, 0;
build_requires q{Test::Moose}, 0;
+build_requires q{Test::Exception}, 0;
requires q{Moose}, '0.61';
requires q{Sub::Install}, '0.924';
PositiveInt NegativeInt
ArrayRefOfPositiveInt ArrayRefOfAtLeastThreeNegativeInts
LotsOfInnerConstraints StrOrArrayRef
+ MyDateTime
)];
# import builtin types
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(%$_) };
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);
+ return $type_constraint->parameterize(@args);
}
=head2 create_base_type_constraint ($name)
--- /dev/null
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::Exception;
+
+use Test::More tests => 2;
+
+BEGIN {
+ package TypeLib;
+ use MooseX::Types -declare => [qw/MyType ArrayRefOfMyType/];
+ use MooseX::Types::Moose qw/ArrayRef Str/;
+
+ subtype MyType, as Str, where {
+ length == 1
+ };
+
+ coerce ArrayRef[MyType], from Str, via {
+ [split //]
+ };
+
+# same thing with an explicit subtype
+ subtype ArrayRefOfMyType, as ArrayRef[MyType];
+
+ coerce ArrayRefOfMyType, from Str, via {
+ [split //]
+ };
+}
+{
+ package AClass;
+ use Moose;
+ BEGIN { TypeLib->import(qw/MyType ArrayRefOfMyType/) };
+ use MooseX::Types::Moose 'ArrayRef';
+
+ has parameterized => (is => 'rw', isa => ArrayRef[MyType], coerce => 1);
+ has subtype => (is => 'rw', isa => ArrayRefOfMyType, coerce => 1);
+}
+
+my $instance = AClass->new;
+
+lives_ok { $instance->parameterized('foo') }
+ 'coercion applied to parameterized type';
+
+lives_ok { $instance->subtype('foo') } 'coercion applied to subtype';