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





Reply via email to