coderef and also throw the correct error message if the constraining value does
not match it's requirement.
+around 'compile_type_constraint' => sub {
+ my ($compile_type_constraint, $self, @args) = @_;
+
+ if($self->has_type_constraints) {
+ my $type_constraints = $self->type_constraints;
+ my $constraint = $self->generate_constraint_for($type_constraints);
+ $self->_set_constraint($constraint);
+ }
+
+ return $self->$compile_type_constraint(@args);
+};
+
+
=cut
around '_compiled_type_constraint' => sub {
around 'coerce' => sub {
my ($coerce, $self, @args) = @_;
-
if($self->has_constraining_value) {
push @args, $self->constraining_value;
- if(@{$self->coercion->type_coercion_map}) {
- my $coercion = $self->coercion;
- my $coerced = $self->$coerce(@args);
- if(defined $coerced) {
- return $coerced;
- } else {
- my $parent = $self->parent;
- return $parent->coerce(@args);
- }
+ }
+ if(@{$self->coercion->type_coercion_map}) {
+ my $coercion = $self->coercion;
+ my $coerced = $coercion->coerce(@args);
+ if(defined $coerced) {
+ return $coerced;
} else {
my $parent = $self->parent;
return $parent->coerce(@args);
- }
- }
- else {
- return $self->$coerce(@args);
- }
- return;
-};
-
-=head2 get_message
-
-Give you a better peek into what's causing the error.
-
-around 'get_message' => sub {
- my ($get_message, $self, $value) = @_;
- return $self->$get_message($value);
+ }
+ } else {
+ my $parent = $self->parent;
+ return $parent->coerce(@args);
+ }
};
=head1 SEE ALSO
use Test::More;
-eval "use Set::Scalar"; if($@) {
- plan skip_all => 'Set::Scalar not installed';
-}
-
-
{
package Test::MooseX::Types::Parameterizable::Synopsis;
use Moose;
use MooseX::Types::Parameterizable qw(Parameterizable);
- use MooseX::Types::Moose qw(Str Int);
+ use MooseX::Types::Moose qw(Str Int ArrayRef);
use MooseX::Types -declare=>[qw(Varchar)];
## Create a type constraint that is a string but parameterizes an integer
},
message { "'$_' is too long" };
+ coerce Varchar,
+ from ArrayRef,
+ via {
+ my ($arrayref, $int) = @_;
+ join('', @$arrayref);
+ };
+
my $varchar_five = Varchar[5];
Test::More::ok $varchar_five->check('four');
Test::More::ok $varchar_ten->check( 'X' x 9 );
Test::More::ok ! $varchar_ten->check( 'X' x 12 );
- has varchar_five => (isa=>Varchar[5], is=>'ro');
+ has varchar_five => (isa=>$varchar_five, is=>'ro', coerce=>1);
has varchar_ten => (isa=>Varchar[10], is=>'ro');
my $object1 = __PACKAGE__->new(