diff options
author | Rafael Kitover <rkitover@cpan.org> | 2009-06-16 10:49:47 -0700 |
---|---|---|
committer | Rafael Kitover <rkitover@cpan.org> | 2009-06-16 10:49:47 -0700 |
commit | 44b44091fa8a04bbadc986236b09e7d1bd117965 (patch) | |
tree | 6c16c832078848d1901177a6b53b568b9a154e2d | |
parent | 2429fb7e636733a986bb4211b1e049418284c25e (diff) | |
download | mx-alwayscoerce-44b44091fa8a04bbadc986236b09e7d1bd117965.tar.gz mx-alwayscoerce-44b44091fa8a04bbadc986236b09e7d1bd117965.zip |
make coerce => 0 work for class_has
-rw-r--r-- | lib/MooseX/AlwaysCoerce.pm | 8 | ||||
-rw-r--r-- | 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<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 { @@ -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' ); |