X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FAlwaysCoerce.pm;h=b86935dd284fcf25573f1d7e92a94c028ec655bc;hb=c3fabb0cc7d9ef9f8e29431b271675f9693ab3cb;hp=3b1893cec3723439a2df7529884968603b249343;hpb=57d1fb144c7288216e33842337a21394703170b5;p=gitmo%2FMooseX-AlwaysCoerce.git diff --git a/lib/MooseX/AlwaysCoerce.pm b/lib/MooseX/AlwaysCoerce.pm index 3b1893c..b86935d 100644 --- a/lib/MooseX/AlwaysCoerce.pm +++ b/lib/MooseX/AlwaysCoerce.pm @@ -3,27 +3,21 @@ package MooseX::AlwaysCoerce; use strict; use warnings; -use namespace::autoclean; +use namespace::autoclean 0.12; use Moose (); -use MooseX::ClassAttribute (); +use MooseX::ClassAttribute 0.24 (); use Moose::Exporter; use Moose::Util::MetaRole; use Carp; Moose::Exporter->setup_import_methods; +=pod + =head1 NAME MooseX::AlwaysCoerce - Automatically enable coercions for Moose attributes -=head1 VERSION - -Version 0.07 - -=cut - -our $VERSION = '0.07'; - =head1 SYNOPSIS package MyClass; @@ -62,7 +56,7 @@ Use C<< coerce => 0 >> to disable a coercion explicitly. return $current_val if defined $current_val; - return 1 if $self->type_constraint->has_coercion; + return 1 if $self->type_constraint && $self->type_constraint->has_coercion; return 0; }; @@ -70,17 +64,16 @@ Use C<< coerce => 0 >> to disable a coercion explicitly. use namespace::autoclean; use Moose::Role; use Moose::Util::TypeConstraints; - use MooseX::ClassAttribute; around add_class_attribute => sub { my $next = shift; my $self = shift; my ($what, %opts) = @_; - return unless exists $opts{isa}; - - my $type = Moose::Util::TypeConstraints::find_or_parse_type_constraint($opts{isa}); - $opts{coerce} = 1 if not exists $opts{coerce} and $type->has_coercion; + if (exists $opts{isa}) { + my $type = Moose::Util::TypeConstraints::find_or_parse_type_constraint($opts{isa}); + $opts{coerce} = 1 if not exists $opts{coerce} and $type->has_coercion; + } $self->$next($what, %opts); }; @@ -96,8 +89,9 @@ my (undef, undef, $init_meta) = Moose::Exporter->build_import_methods( }, role_metaroles => { - # applied_attribute should be available soon, for now roles are borked - # applied_attribute => ['MooseX::AlwaysCoerce::Role::Meta::Attribute'], + (Moose->VERSION >= 1.9900 + ? (applied_attribute => ['MooseX::AlwaysCoerce::Role::Meta::Attribute']) + : ()), role => ['MooseX::AlwaysCoerce::Role::Meta::Class'], } ); @@ -112,6 +106,13 @@ sub init_meta { goto $init_meta; } +1; +# vim:et sts=4 sw=4 tw=0: +__END__ + +=for Pod::Coverage + init_meta + =head1 AUTHOR Rafael Kitover, C<< >> @@ -165,5 +166,3 @@ This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut - -1; # End of MooseX::AlwaysCoerce