1 package DBIx::Class::AccessorGroup;
8 sub mk_group_accessors {
9 my($self, $group, @fields) = @_;
11 $self->_mk_group_accessors('make_group_accessor', $group, @fields);
17 no warnings 'redefine';
19 sub _mk_group_accessors {
20 my($self, $maker, $group, @fields) = @_;
21 my $class = ref $self || $self;
23 # So we don't have to do lots of lookups inside the loop.
24 $maker = $self->can($maker) unless ref $maker;
26 foreach my $field (@fields) {
27 if( $field eq 'DESTROY' ) {
29 &Carp::carp("Having a data accessor named DESTROY in ".
30 "'$class' is unwise.");
35 ($name, $field) = @$field if ref $field;
37 my $accessor = $self->$maker($group, $field);
38 my $alias = "_${name}_accessor";
40 #warn "$class $group $field $alias";
42 *{$class."\:\:$name"} = $accessor;
43 #unless defined &{$class."\:\:$field"}
45 *{$class."\:\:$alias"} = $accessor;
46 #unless defined &{$class."\:\:$alias"}
51 sub mk_group_ro_accessors {
52 my($self, $group, @fields) = @_;
54 $self->_mk_group_accessors('make_group_ro_accessor', $group, @fields);
57 sub mk_group_wo_accessors {
58 my($self, $group, @fields) = @_;
60 $self->_mk_group_accessors('make_group_wo_accessor', $group, @fields);
63 sub make_group_accessor {
64 my ($class, $group, $field) = @_;
66 my $set = "set_$group";
67 my $get = "get_$group";
69 # Build a closure around $field.
74 return $self->$set($field, @_);
77 return $self->$get($field);
82 sub make_group_ro_accessor {
83 my($class, $group, $field) = @_;
85 my $get = "get_$group";
93 Carp::croak("'$caller' cannot alter the value of '$field' on ".
94 "objects of class '$class'");
97 return $self->$get($field);
102 sub make_group_wo_accessor {
103 my($class, $group, $field) = @_;
105 my $set = "set_$group";
113 Carp::croak("'$caller' cannot access the value of '$field' on ".
114 "objects of class '$class'");
117 return $self->$set($field, @_);