X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FClass%2FMOP%2FAttribute.pm;h=1b721d785bbdf532c88477f0dca60fb629a284f2;hb=d14f6cbe014dcba2caeca6d19a056074356ae534;hp=32931a99bdce4b88b6b8165519b11d17512576ee;hpb=78d9bb3863ec6ddf5537fc9913fba3b170a8b88d;p=gitmo%2FClass-MOP.git diff --git a/lib/Class/MOP/Attribute.pm b/lib/Class/MOP/Attribute.pm index 32931a9..1b721d7 100644 --- a/lib/Class/MOP/Attribute.pm +++ b/lib/Class/MOP/Attribute.pm @@ -9,7 +9,7 @@ use Class::MOP::Method::Accessor; use Carp 'confess'; use Scalar::Util 'blessed', 'reftype', 'weaken'; -our $VERSION = '0.19'; +our $VERSION = '0.20'; our $AUTHORITY = 'cpan:STEVAN'; use base 'Class::MOP::Object'; @@ -133,8 +133,25 @@ sub init_arg { $_[0]->{'$!init_arg'} } # end bootstrapped away method section. # (all methods below here are kept intact) -sub get_read_method { $_[0]->reader || $_[0]->accessor } -sub get_write_method { $_[0]->writer || $_[0]->accessor } +sub get_read_method { + my $self = shift; + my $reader = $self->reader || $self->accessor; + # normal case ... + return $reader unless ref $reader; + # the HASH ref case + my ($name) = %$reader; + return $name; +} + +sub get_write_method { + my $self = shift; + my $writer = $self->writer || $self->accessor; + # normal case ... + return $writer unless ref $writer; + # the HASH ref case + my ($name) = %$writer; + return $name; +} sub get_read_method_ref { my $self = shift; @@ -148,7 +165,7 @@ sub get_read_method_ref { sub get_write_method_ref { my $self = shift; - if ((my $writer = $self->get_write_method) && $self->associated_class) { + if ((my $writer = $self->get_write_method) && $self->associated_class) { return $self->associated_class->get_method($writer); } else {