aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorRafael Kitover <rkitover@cpan.org>2010-07-12 20:03:39 -0400
committerRafael Kitover <rkitover@cpan.org>2010-07-12 20:03:39 -0400
commitb058bf611520d8f60af9252d77886af53a907c3c (patch)
treece42109c5815b839911e54889860185615f658a5 /lib
parente930b397d88d9bbb04a4186c387485ca2aaf5e23 (diff)
downloadmx-alwayscoerce-b058bf611520d8f60af9252d77886af53a907c3c.tar.gz
mx-alwayscoerce-b058bf611520d8f60af9252d77886af53a907c3c.zip
actually apply Schwern's patch
Diffstat (limited to 'lib')
-rw-r--r--lib/MooseX/AlwaysCoerce.pm14
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/MooseX/AlwaysCoerce.pm b/lib/MooseX/AlwaysCoerce.pm
index b82c423..b8ca807 100644
--- a/lib/MooseX/AlwaysCoerce.pm
+++ b/lib/MooseX/AlwaysCoerce.pm
@@ -54,18 +54,28 @@ Use C<< coerce => 0 >> to disable a coercion explicitly.
use namespace::autoclean;
use Moose::Role;
- has coerce => (is => 'rw', default => 1);
+ has coerce => (
+ lazy => 1,
+ reader => "should_coerce",
+ default => sub {
+ return 1 if shift->type_constraint->has_coercion;
+ return 0;
+ }
+ );
+
package MooseX::AlwaysCoerce::Role::Meta::Class;
use namespace::autoclean;
use Moose::Role;
+ use Moose::Util::TypeConstraints;
around add_class_attribute => sub {
my $next = shift;
my $self = shift;
my ($what, %opts) = @_;
- $opts{coerce} = 1 unless exists $opts{coerce};
+ my $type = Moose::Util::TypeConstraints::find_or_parse_type_constraint($opts{isa});
+ $opts{coerce} = 1 if !exists $opts{coerce} and $type->has_coercion;
$self->$next($what, %opts);
};