broken classdata version
[catagits/Catalyst-Runtime.git] / lib / Catalyst / ClassData.pm
CommitLineData
a7caa492 1package Catalyst::ClassData;
2
3use Moose::Role;
4use Scalar::Util 'blessed';
5
6sub mk_classdata {
efbfd430 7 my ($class, $attribute) = @_;
a7caa492 8 confess("mk_classdata() is a class method, not an object method")
efbfd430 9 if blessed $class;
10
11 my $slot = '$'.$attribute;
12 my $accessor = sub {
13 if(@_ > 1){
14 $_[0]->meta->add_package_symbol($slot, \ $_[1]);
15 return $_[1];
16 }
17 foreach my $super ( $_[0], $_[0]->meta->linearized_isa ) {
18 my $meta = $super->meta;
19 if( $meta->has_package_symbol($slot) ){
20 return $meta->get_package_symbol($slot);
21 }
22 }
23 return;
a7caa492 24 };
efbfd430 25 my $accessor = eval $code;
26 confess("Failed to create accessor: $@ \n $code \n")
27 unless ref $accessor eq 'CODE';
a7caa492 28
efbfd430 29 my $meta = $class->meta;
a7caa492 30 my $alias = "_${attribute}_accessor";
efbfd430 31 $meta->add_method($alias, $accessor);
32 $meta->add_method($attribute, $accessor);
33 $class->$attribute($_[2]) if(@_ > 2);
a7caa492 34 return $accessor;
35}
36
371;
38
39__END__
efbfd430 40
41# my $code = ' sub {
42# if(@_ > 1){
43# $_[0]->meta->add_package_symbol(\''.$slot.'\', \ $_[1]);
44# return $_[1];
45# }
46# foreach my $super ( $_[0], $_[0]->meta->linearized_isa ) {
47# my $meta = $super->meta;
48# if( $meta->has_package_symbol(\''.$slot.'\') ){
49# return $meta->get_package_symbol(\''.$slot.'\');
50# }
51# }
52# return;
53# }';
54# my $accessor = eval $code;