72 lines
2.5 KiB
Text
72 lines
2.5 KiB
Text
=head1 NAME
|
|
|
|
MooseX::ClassAttribute - Declare class attributes Moose-style
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
This module allows you to declare class attributes in exactly the same
|
|
way as you declare object attributes, except using C<class_has()>
|
|
instead of C<has()>. It is also possible to make these attributes
|
|
immutable (and faster) just as you can with normal Moose attributes.
|
|
|
|
You can use any feature of Moose's attribute declarations, including
|
|
overriding a parent's attributes, delegation (C<handles>), and
|
|
attribute metaclasses, and it should just work.
|
|
|
|
The accessors methods for class attribute may be called on the class
|
|
directly, or on objects of that class. Passing a class attribute to
|
|
the constructor will not set it.
|
|
|
|
=head1 FUNCTIONS
|
|
|
|
This class exports one function when you use it, C<class_has()>. This
|
|
works exactly like Moose's C<has()>, but it declares class attributes.
|
|
|
|
One little nit is that if you include C<no Moose> in your class, you
|
|
won't remove the C<class_has()> function. To do that you must include
|
|
C<no MooseX::ClassAttribute> as well.
|
|
|
|
If you want to use this module to create class attributes in I<other>
|
|
classes, you can call the C<process_class_attribute()> function like
|
|
this:
|
|
|
|
MooseX::ClassAttribute::process_class_attribute( $package, ... );
|
|
|
|
The first argument is the package which will have the class attribute,
|
|
and the remaining arguments are the same as those passed to
|
|
C<class_has()>.
|
|
|
|
=head2 Implementation and Immutability
|
|
|
|
Underneath the hood, this class creates one new class for each class
|
|
which has class attributes and sets up delegating methods in the class
|
|
for which you're creating class attributes. You don't need to worry
|
|
about this too much, except when it comes to making a class immutable.
|
|
|
|
Since the class attributes are not really stored in your class, you
|
|
need to make the containing class immutable as well as your own ...
|
|
|
|
__PACKAGE__->meta()->make_immutable();
|
|
MooseX::ClassAttribute::containing_class()->meta()->make_immutable();
|
|
|
|
I<This may change in the future!>
|
|
|
|
=head1 AUTHOR
|
|
|
|
Dave Rolsky, C<< <autarch@urth.org> >>
|
|
|
|
=head1 BUGS
|
|
|
|
Please report any bugs or feature requests to
|
|
C<bug-moosex-classattribute@rt.cpan.org>, or through the web interface
|
|
at L<http://rt.cpan.org>. I will be notified, and then you'll
|
|
automatically be notified of progress on your bug as I make changes.
|
|
|
|
=head1 COPYRIGHT & LICENSE
|
|
|
|
Copyright 2007 Dave Rolsky, All Rights Reserved.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the same terms as Perl itself.
|
|
|
|
=cut
|