Commit | Line | Data |
a7caa492 |
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__ |