some tests fail and some things are ugly, but i think its a small step forward
[catagits/Catalyst-Runtime.git] / lib / Catalyst / ClassData.pm
1 package Catalyst::ClassData;
2
3 use Moose::Role;
4 use Scalar::Util 'blessed';
5
6 sub mk_classdata {
7   my ($declaredclass, $attribute, $data) = @_;
8   confess("mk_classdata() is a class method, not an object method")
9     if ref $declaredclass;
10
11   my $accessor = sub {
12     my $wantclass = blessed($_[0]) || $_[0];
13
14     return $wantclass->mk_classdata($attribute)->(@_)
15       if @_>1 && $wantclass ne $declaredclass;
16
17     $data = $_[1] if @_>1;
18     return $data;
19   };
20
21   my $alias = "_${attribute}_accessor";
22   $declaredclass->meta->add_method($alias, $accessor);
23   $declaredclass->meta->add_method($attribute, $accessor);
24   return $accessor;
25 }
26
27 1;
28
29 __END__