X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FAccessorGroup.pm;h=7a2da2cf5e69ec20c84c2776b96500ff4f8dac21;hb=12bbb33986a29dc27dd3e2b9d082a87f50124ec1;hp=51dd7bc223b2accac6049f758818e8cd0841ad3f;hpb=ef29a097f034c0e4043011e7dda097a791d39c7d;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/lib/DBIx/Class/AccessorGroup.pm b/lib/DBIx/Class/AccessorGroup.pm index 51dd7bc..7a2da2c 100644 --- a/lib/DBIx/Class/AccessorGroup.pm +++ b/lib/DBIx/Class/AccessorGroup.pm @@ -1,5 +1,12 @@ package DBIx::Class::AccessorGroup; +use strict; +use warnings; + +use base qw/Class::Data::Inheritable/; + +__PACKAGE__->mk_classdata('_accessor_group_deleted' => { }); + sub mk_group_accessors { my($self, $group, @fields) = @_; @@ -9,6 +16,7 @@ sub mk_group_accessors { { no strict 'refs'; + no warnings 'redefine'; sub _mk_group_accessors { my($self, $maker, $group, @fields) = @_; @@ -27,11 +35,13 @@ sub mk_group_accessors { my $accessor = $self->$maker($group, $field); my $alias = "_${field}_accessor"; - *{$class."\:\:$field"} = $accessor - unless defined &{$class."\:\:$field"}; + #warn "$class $group $field $alias"; - *{$class."\:\:$alias"} = $accessor - unless defined &{$class."\:\:$alias"}; + *{$class."\:\:$field"} = $accessor; + #unless defined &{$class."\:\:$field"} + + *{$class."\:\:$alias"} = $accessor; + #unless defined &{$class."\:\:$alias"} } } } @@ -59,10 +69,10 @@ sub make_group_accessor { my $self = shift; if(@_) { - return $self->set($field, @_); + return $self->$set($field, @_); } else { - return $self->get($field); + return $self->$get($field); } }; } @@ -82,7 +92,7 @@ sub make_group_ro_accessor { "objects of class '$class'"); } else { - return $self->get($field); + return $self->$get($field); } }; } @@ -102,9 +112,18 @@ sub make_group_wo_accessor { "objects of class '$class'"); } else { - return $self->set($field, @_); + return $self->$set($field, @_); } }; } +sub delete_accessor { + my ($class, $accessor) = @_; + $class = ref $class if ref $class; + my $sym = "${class}::${accessor}"; + undef &$sym; + delete $DB::sub{$sym}; + #$class->_accessor_group_deleted->{"${class}::${accessor}"} = 1; +} + 1;