From: Rafael Kitover Date: Tue, 16 Jun 2009 17:49:47 +0000 (-0700) Subject: make coerce => 0 work for class_has X-Git-Tag: 0.04~3 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=44b44091fa8a04bbadc986236b09e7d1bd117965;p=gitmo%2FMooseX-AlwaysCoerce.git make coerce => 0 work for class_has --- diff --git a/lib/MooseX/AlwaysCoerce.pm b/lib/MooseX/AlwaysCoerce.pm index ab98a64..4247664 100644 --- a/lib/MooseX/AlwaysCoerce.pm +++ b/lib/MooseX/AlwaysCoerce.pm @@ -45,6 +45,8 @@ coercion not run?" only to find out that you forgot C<< coerce => 1 >> ? Just load this module in your L 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 { @@ -61,7 +63,11 @@ enabled for every attribute and class attribute automatically. 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); }; } diff --git a/t/01-basic.t b/t/01-basic.t index 5b57cf8..e15c758 100644 --- a/t/01-basic.t +++ b/t/01-basic.t @@ -2,7 +2,7 @@ use strict; use warnings; -use Test::More tests => 3; +use Test::More tests => 4; { package MyClass; @@ -16,6 +16,8 @@ use Test::More tests => 3; 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' ); @@ -25,3 +27,6 @@ ok( (!$@), 'attribute coercion ran' ); eval { $instance->bar('baz') }; ok( (!$@), 'class attribute coercion ran' ); + +eval { $instance->baz('quux') }; +ok( $@, 'class attribute coercion did not run with coerce => 0' );