X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FMeta%2FAttribute%2FNative%2FTrait.pm;h=9250f307e1403cfee7aa499aa0d7e1e98c0cccdd;hb=refs%2Ftags%2F1.25;hp=a44b7dd037252879168fd1688f3bfbb38fcc2d65;hpb=e132fd56595aa2447bf5ebf53cf73b64bce32003;p=gitmo%2FMoose.git diff --git a/lib/Moose/Meta/Attribute/Native/Trait.pm b/lib/Moose/Meta/Attribute/Native/Trait.pm index a44b7dd..9250f30 100644 --- a/lib/Moose/Meta/Attribute/Native/Trait.pm +++ b/lib/Moose/Meta/Attribute/Native/Trait.pm @@ -1,41 +1,87 @@ package Moose::Meta::Attribute::Native::Trait; use Moose::Role; + +use List::MoreUtils qw( any uniq ); use Moose::Util::TypeConstraints; use Moose::Deprecated; -our $VERSION = '1.15'; +our $VERSION = '1.25'; $VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; requires '_helper_type'; +has _used_default_is => ( + is => 'rw', + isa => 'Bool', + default => 0, +); + before '_process_options' => sub { my ( $self, $name, $options ) = @_; $self->_check_helper_type( $options, $name ); - if ( !exists $options->{is} && $self->can('_default_is') ) { + if ( !( any { exists $options->{$_} } qw( is reader writer accessor ) ) + && $self->can('_default_is') ) { + $options->{is} = $self->_default_is; - Moose::Deprecated::deprecated( - feature => 'default is for Native Trait', - message => - q{Allowing a native trait to automatically supply a value for "is" is deprecated} - ); + $options->{_used_default_is} = 1; } - if ( !exists $options->{default} && $self->can('_default_default') ) { + if ( + !( + $options->{required} + || any { exists $options->{$_} } qw( default builder lazy_build ) + ) + && $self->can('_default_default') + ) { + $options->{default} = $self->_default_default; Moose::Deprecated::deprecated( feature => 'default default for Native Trait', message => - 'Allowing a native trait to automatically supply a default is deprecated' + 'Allowing a native trait to automatically supply a default is deprecated.' + . ' You can avoid this warning by supplying a default, builder, or making the attribute required' ); } }; +after 'install_accessors' => sub { + my $self = shift; + + return unless $self->_used_default_is; + + my @methods + = $self->_default_is eq 'rw' + ? qw( reader writer accessor ) + : 'reader'; + + my $name = $self->name; + my $class = $self->associated_class->name; + + for my $meth ( uniq grep {defined} map { $self->$_ } @methods ) { + + my $message + = "The $meth method in the $class class was automatically created" + . " by the native delegation trait for the $name attribute." + . q{ This "default is" feature is deprecated.} + . q{ Explicitly set "is" or define accessor names to avoid this}; + + $self->associated_class->add_before_method_modifier( + $meth => sub { + Moose::Deprecated::deprecated( + feature => 'default is for Native Trait', + message =>$message, + ); + } + ); + } + }; + sub _check_helper_type { my ( $self, $options, $name ) = @_; @@ -178,7 +224,7 @@ Jesse Luehrs =head1 COPYRIGHT AND LICENSE -Copyright 2007-2009 by Infinity Interactive, Inc. +Copyright 2007-2010 by Infinity Interactive, Inc. L