Just load this module in your L<Moose> class and C<< coerce => 1 >> will be
enabled for every attribute and class attribute automatically.
+Use C<< coerce => 0 >> to disable a coercion explicitly.
+
=cut
{
around add_class_attribute => sub {
my $next = shift;
my $self = shift;
- $self->$next(@_, coerce => 1);
+ my ($what, %opts) = @_;
+
+ $opts{coerce} = 1 unless exists $opts{coerce};
+
+ $self->$next($what, %opts);
};
}
use strict;
use warnings;
-use Test::More tests => 3;
+use Test::More tests => 4;
{
package MyClass;
has foo => (is => 'rw', isa => 'MyType');
class_has bar => (is => 'rw', isa => 'MyType');
+
+ class_has baz => (is => 'rw', isa => 'MyType', coerce => 0);
}
ok( (my $instance = MyClass->new), 'instance' );
eval { $instance->bar('baz') };
ok( (!$@), 'class attribute coercion ran' );
+
+eval { $instance->baz('quux') };
+ok( $@, 'class attribute coercion did not run with coerce => 0' );