X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FPerl%2FCritic%2FPolicy%2FDynamicMoose%2FProhibitPublicBuilders.pm;fp=lib%2FPerl%2FCritic%2FPolicy%2FDynamicMoose%2FProhibitPublicBuilders.pm;h=90155abcf281c612421066d32d980461d4cc29ff;hb=914f300c017509173ef3d6b5e553e69ff7e52740;hp=03bb8f6f0dc2b8cccc7447deec6f37ab033e200b;hpb=336800ce224f268b960d923aa6d9af4e2bebde12;p=gitmo%2FPerl-Critic-Dynamic-Moose.git diff --git a/lib/Perl/Critic/Policy/DynamicMoose/ProhibitPublicBuilders.pm b/lib/Perl/Critic/Policy/DynamicMoose/ProhibitPublicBuilders.pm index 03bb8f6..90155ab 100644 --- a/lib/Perl/Critic/Policy/DynamicMoose/ProhibitPublicBuilders.pm +++ b/lib/Perl/Critic/Policy/DynamicMoose/ProhibitPublicBuilders.pm @@ -4,6 +4,8 @@ extends 'Perl::Critic::Policy::DynamicMoose'; Readonly::Scalar my $EXPL => q{Prefix builder method names with an underscore}; +augment applies_to_metaclass => sub { 'Moose::Meta::Role' }; + sub violates_metaclass { my $self = shift; my $meta = shift; @@ -15,10 +17,17 @@ sub violates_metaclass { my $attributes = $meta->get_attribute_map; for my $name (keys %$attributes) { my $attribute = $attributes->{$name}; + my $builder; - next if !$attribute->has_builder; - - my $builder = $attribute->builder; + if (blessed($attribute)) { + next if !$attribute->has_builder; + $builder = $attribute->builder; + } + else { + # Roles suck :( + next if !defined($attribute->{builder}); + $builder = $attribute->{builder}; + } if ($builder !~ /^_/) { my $desc = "Builder method '$builder' of attribute '$attribute' of class '$classname' is public";