use strict;
use warnings;
use Test::More;
{
package SomeClass;
use Moose;
use Moose::Util::TypeConstraints;
subtype 'DigitSix' => as 'Num'
=> where { /^6$/ };
subtype 'TextSix' => as 'Str'
=> where { /Six/i };
coerce 'TextSix'
=> from 'DigitSix'
=> via { confess("Cannot live without 6 ($_)") unless /^6$/; 'Six' };
has foo => (
is => 'ro',
isa => 'TextSix',
coerce => 1,
default => 6,
lazy => 1
);
}
my $attr = SomeClass->meta->get_attribute('foo');
is($attr->get_value(SomeClass->new()), 'Six');
is(SomeClass->new()->foo, 'Six');
done_testing;