X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FClassAttribute.pm;h=c2f37c5f6cf2e5d653e7926cfa19d621acef33eb;hb=2e5f49fb925d8ef82edd87de22469cf17fe74171;hp=fd5b3f92a0c9ef450aef4c09b3ce09683171f685;hpb=a1ec1ff1e2b1e9418b4b954d62ef50cec49d7b48;p=gitmo%2FMooseX-ClassAttribute.git diff --git a/lib/MooseX/ClassAttribute.pm b/lib/MooseX/ClassAttribute.pm index fd5b3f9..c2f37c5 100644 --- a/lib/MooseX/ClassAttribute.pm +++ b/lib/MooseX/ClassAttribute.pm @@ -3,13 +3,12 @@ package MooseX::ClassAttribute; use strict; use warnings; -our $VERSION = '0.05'; +our $VERSION = '0.08'; our $AUTHORITY = 'cpan:DROLSKY'; -use Moose (); +use Moose 0.74 (); use Moose::Exporter; use MooseX::ClassAttribute::Role::Meta::Class; -use MooseX::ClassAttribute::Role::Meta::Attribute; Moose::Exporter->setup_import_methods ( with_caller => [ 'class_has' ] ); @@ -38,9 +37,9 @@ sub class_has my $attrs = ref $name eq 'ARRAY' ? $name : [$name]; Class::MOP::Class - ->initialize($caller) - ->add_class_attribute( $_, %options ) - for @{ $attrs }; + ->initialize($caller) + ->add_class_attribute( $_, %options ) + for @{ $attrs }; } 1; @@ -67,7 +66,6 @@ MooseX::ClassAttribute - Declare class attributes Moose-style ); __PACKAGE__->meta()->make_immutable(); - MooseX::ClassAttribute::container_class()->meta()->make_immutable(); no Moose; no MooseX::ClassAttribute; @@ -80,15 +78,14 @@ 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 -instead of C. It is also possible to make these attributes -immutable (and faster) just as you can with normal Moose attributes. +way as object attributes, using C instead of C. You can use any feature of Moose's attribute declarations, including overriding a parent's attributes, delegation (C), and -attribute metaclasses, and it should just work. +attribute metaclasses, and it should just work. The one exception is +the "required" flag, which is not allowed for class attributes. -The accessors methods for class attribute may be called on the class +The accessor 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. @@ -101,30 +98,45 @@ One little nit is that if you include C in your class, you won't remove the C function. To do that you must include C as well. -If you want to use this module to create class attributes in I -classes, you can call the C function like -this: +=head2 Implementation and Immutability - MooseX::ClassAttribute::process_class_attribute( $package, ... ); +This module will add a role to your class's metaclass, See +L for details. This role +provides introspection methods for class attributes. -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 attributes themselves do the +L role. -=head2 Implementation and Immutability +There is also a L +which provides part of the inlining implementation for class +attributes. + +=head2 Cooperation with Metaclasses and Traits + +This module should work with most attribute metaclasses and traits, +but it's possible that conflicts could occur. This module has been +tested to work with C. + +=head1 DONATIONS -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. +If you'd like to thank me for the work I've done on this module, +please consider making a "donation" to me via PayPal. I spend a lot of +free time creating free software, and would appreciate any support +you'd care to offer. -Since the class attributes are not really stored in your class, you -need to make the container class immutable as well as your own ... +Please note that B in order +for me to continue working on this particular software. I will +continue to do so, inasmuch as I have in the past, for as long as it +interests me. - __PACKAGE__->meta()->make_immutable(); - MooseX::ClassAttribute::container_class()->meta()->make_immutable(); +Similarly, a donation made in this way will probably not make me work +on this software much more, unless I get so many donations that I can +consider working on free software full time, which seems unlikely at +best. -I +To donate, log into PayPal and send money to autarch@urth.org or use +the button on this page: +L =head1 AUTHOR @@ -139,7 +151,7 @@ automatically be notified of progress on your bug as I make changes. =head1 COPYRIGHT & LICENSE -Copyright 2007 Dave Rolsky, All Rights Reserved. +Copyright 2007-2008 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.