aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Kitover <rkitover@cpan.org>2009-06-16 10:49:47 -0700
committerRafael Kitover <rkitover@cpan.org>2009-06-16 10:49:47 -0700
commit44b44091fa8a04bbadc986236b09e7d1bd117965 (patch)
tree6c16c832078848d1901177a6b53b568b9a154e2d
parent2429fb7e636733a986bb4211b1e049418284c25e (diff)
downloadmx-alwayscoerce-44b44091fa8a04bbadc986236b09e7d1bd117965.tar.gz
mx-alwayscoerce-44b44091fa8a04bbadc986236b09e7d1bd117965.zip
make coerce => 0 work for class_has
-rw-r--r--lib/MooseX/AlwaysCoerce.pm8
-rw-r--r--t/01-basic.t7
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' );