1 package Catalyst::ClassData;
5 use Scalar::Util 'blessed';
8 my ($class, $attribute) = @_;
9 confess("mk_classdata() is a class method, not an object method")
12 my $slot = '$'.$attribute;
14 my $meta = $_[0]->meta;
16 $meta->add_package_symbol($slot, \ $_[1]);
20 if( $meta->has_package_symbol($slot) ){
21 return ${ $meta->get_package_symbol($slot) };
23 foreach my $super ( $meta->linearized_isa ) {
24 my $super_meta = Moose::Meta::Class->initialize($super);
25 if( $super_meta->has_package_symbol($slot) ){
26 return ${ $super_meta->get_package_symbol($slot) };
33 confess("Failed to create accessor: $@ ")
34 unless ref $accessor eq 'CODE';
36 my $meta = $class->meta;
37 my $alias = "_${attribute}_accessor";
38 $meta->add_method($alias, $accessor);
39 $meta->add_method($attribute, $accessor);
40 $class->$attribute($_[2]) if(@_ > 2);
51 Catalyst::ClassData - Class data acessors
55 =head2 mk_classdata $name, $optional_value
57 A moose-safe clone of L<Class::Data::Inheritable> that borrows some ideas from
58 L<Class::Accessor::Grouped>;
66 This program is free software, you can redistribute it and/or modify it under
67 the same terms as Perl itself.