I guess that if you're trying to prevent this as an action at a
distance, 'deep_coerce' wouldn't really be acceptable either.
Wouldn't that just be a more explicit warning of an action at a
distance?
If moose type constraints become too complicated, I guess at some
point, a designer/developer just needs to turn the parametrized type
into its own class. So, maybe I'm answering my own question here.
At any rate, I'll look more at the mailing list archives...
Thanks,
Charles Alderman
----- Original Message -----
From: Yuval Kogman <[EMAIL PROTECTED]>
Sent: Thu, 24 Jul 2008 22:37:45 +0300
Re: Re: Coercions and custom type parameters
This has been brought up before, the short story is 'coerce => 1'
may introduce action at a distance, so we decided that if at all
this should be 'deep_coerce => 1'.
At any rate, this is a little trickier than it sounds, but if Stevan
approves deep_coerce => 1 feel free to commit this as a todo test
and start hacking away.
Regards,
Yuval
On Thu, Jul 24, 2008 at 15:20:13 -0400, Charles Alderman wrote:
Hello Moose,
I guess I have an enhancement idea/request.
I have a parametrized ArrayRef[] of a custom type, I'd like my coercion on
that type to work for any of the values in the collection. HashRef[]s
should work too. Maybe Maybe[]s, but not in my example below.
Would this be worthwhile or viable? If so, I'd be willing to attempt a
patch...
Thanks,
Charles Alderman
Here's a test:
----
#!/usr/bin/perl
use strict;
use warnings;
use Test::More tests => 2;
use Test::Exception;
{
package Foo;
use Moose;
use Moose::Util::TypeConstraints;
enum 'Foo::Values' => qw{ Foo Bar Baz None };
coerce 'Foo::Values' => from 'Undef' => via { 'None' };
has 'array_of_foo' => (
is => 'rw',
isa => 'ArrayRef[Foo::Values]',
coerce => 1,
);
}
{
my $foo = Foo->new();
my @ok_values = ( 'Foo', 'Bar', 'Baz', 'None' );
my @coerced_values = ( 'Foo', 'Bar', undef, 'None' );
lives_ok {
$foo->array_of_foo( [EMAIL PROTECTED] );
}
'... setting array with ok values';
lives_ok {
$foo->array_of_foo( [EMAIL PROTECTED] );
}
'... setting array with coerced values';
}
--
Yuval Kogman <[EMAIL PROTECTED]>
http://nothingmuch.woobling.org 0xEBD27418