From b058bf611520d8f60af9252d77886af53a907c3c Mon Sep 17 00:00:00 2001 From: Rafael Kitover Date: Mon, 12 Jul 2010 20:03:39 -0400 Subject: actually apply Schwern's patch --- lib/MooseX/AlwaysCoerce.pm | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'lib/MooseX/AlwaysCoerce.pm') 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); }; -- cgit v1.2.3-54-g00ecf