From 44b44091fa8a04bbadc986236b09e7d1bd117965 Mon Sep 17 00:00:00 2001 From: Rafael Kitover Date: Tue, 16 Jun 2009 10:49:47 -0700 Subject: make coerce => 0 work for class_has --- lib/MooseX/AlwaysCoerce.pm | 8 +++++++- t/01-basic.t | 7 ++++++- 2 files changed, 13 insertions(+), 2 deletions(-) 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' ); -- cgit v1.2.3