dzilize
[gitmo/MooseX-SemiAffordanceAccessor.git] / lib / MooseX / SemiAffordanceAccessor / Role / Attribute.pm
CommitLineData
b95d9f9b 1package MooseX::SemiAffordanceAccessor::Role::Attribute;
2
3use strict;
4use warnings;
5
6use Moose::Role;
7
f227d76f 8before '_process_options' => sub {
b95d9f9b 9 my $class = shift;
10 my $name = shift;
11 my $options = shift;
12
f227d76f 13 if ( exists $options->{is}
14 && !( exists $options->{reader} || exists $options->{writer} ) ) {
15 if ( $options->{is} eq 'ro' ) {
b95d9f9b 16 $options->{reader} = $name;
883845e4 17 delete $options->{is};
b95d9f9b 18 }
f227d76f 19 elsif ( $options->{is} eq 'rw' ) {
b95d9f9b 20 $options->{reader} = $name;
21
22 my $prefix = 'set';
f227d76f 23 if ( $name =~ s/^_// ) {
b95d9f9b 24 $prefix = '_set';
25 }
26
27 $options->{writer} = $prefix . q{_} . $name;
883845e4 28 delete $options->{is};
b95d9f9b 29 }
b95d9f9b 30 }
31};
32
33no Moose::Role;
34
351;
58828d60 36
58828d60 37=head1 SYNOPSIS
38
ce6e6723 39 Moose::Util::MetaRole::apply_metaclass_roles(
40 for_class => $p{for_class},
41 attribute_metaclass_roles =>
42 ['MooseX::SemiAffordanceAccessor::Role::Attribute'],
43 );
58828d60 44
45=head1 DESCRIPTION
46
47This role applies a method modifier to the C<_process_options()>
48method, and tweaks the reader and writer parameters so that they
49follow the semi-affordance naming style.
50
58828d60 51=cut
52