Re: Coercions and custom type parameters
[email protected] (Charles Alderman)
| Newsgroups | perl.moose |
|---|---|
| Message-ID | <[email protected]> |
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( \@ok_values ); >> } >> '... setting array with ok values'; >> >> lives_ok { >> $foo->array_of_foo( \@coerced_values ); >> } >> '... setting array with coerced values'; >> >> } >> > > -- > Yuval Kogman <[email protected]> > http://nothingmuch.woobling.org 0xEBD27418 > >