diff options
author | Rafael Kitover <rkitover@cpan.org> | 2010-07-12 20:03:39 -0400 |
---|---|---|
committer | Rafael Kitover <rkitover@cpan.org> | 2010-07-12 20:03:39 -0400 |
commit | b058bf611520d8f60af9252d77886af53a907c3c (patch) | |
tree | ce42109c5815b839911e54889860185615f658a5 /lib | |
parent | e930b397d88d9bbb04a4186c387485ca2aaf5e23 (diff) | |
download | mx-alwayscoerce-b058bf611520d8f60af9252d77886af53a907c3c.tar.gz mx-alwayscoerce-b058bf611520d8f60af9252d77886af53a907c3c.zip |
actually apply Schwern's patch
Diffstat (limited to 'lib')
-rw-r--r-- | lib/MooseX/AlwaysCoerce.pm | 14 |
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); }; |