if ref($args{default})
&& ref($args{default}) ne 'CODE';
+ confess "You cannot auto-dereference without specifying a type constraint on attribute $name"
+ if $args{auto_deref} && !exists($args{isa});
+
+ confess "You cannot auto-dereference anything other than a ArrayRef or HashRef on attribute $name"
+ if $args{auto_deref}
+ && $args{isa} ne 'ArrayRef'
+ && $args{isa} ne 'HashRef';
+
$args{type_constraint} = delete $args{isa}
if exists $args{isa};
#!/usr/bin/env perl
use strict;
use warnings;
-use Test::More tests => 13;
+use Test::More tests => 15;
use Test::Exception;
do {
isa => 'HashRef',
auto_deref => 1,
);
+
+ ::throws_ok {
+ has any => (
+ is => 'rw',
+ auto_deref => 1,
+ );
+ } qr/You cannot auto-dereference without specifying a type constraint on attribute any/;
+
+ ::throws_ok {
+ has scalar => (
+ is => 'rw',
+ isa => 'Value',
+ auto_deref => 1,
+ );
+ } qr/You cannot auto-dereference anything other than a ArrayRef or HashRef on attribute scalar/;
};
my $obj;