X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FClassAttribute.pm;h=8572aaea4932a7f338733049b63e49bc0cb7a0ae;hb=eeee5ccb10fe2f92415751b2f721a89798393c29;hp=e426d86f06bd3536b465ab0ebdd51c821f38741f;hpb=1cf24811543e78699f4a0eccaad9acbbebb4c9e2;p=gitmo%2FMooseX-ClassAttribute.git diff --git a/lib/MooseX/ClassAttribute.pm b/lib/MooseX/ClassAttribute.pm index e426d86..8572aae 100644 --- a/lib/MooseX/ClassAttribute.pm +++ b/lib/MooseX/ClassAttribute.pm @@ -3,43 +3,45 @@ package MooseX::ClassAttribute; use strict; use warnings; -our $VERSION = '0.07'; +our $VERSION = '0.12'; our $AUTHORITY = 'cpan:DROLSKY'; -use Moose (); +use Moose 0.98 (); use Moose::Exporter; -use MooseX::ClassAttribute::Role::Meta::Class; +use MooseX::ClassAttribute::Trait::Class; +use MooseX::ClassAttribute::Trait::Role; +use MooseX::ClassAttribute::Trait::Application::ToClass; +use MooseX::ClassAttribute::Trait::Application::ToRole; -Moose::Exporter->setup_import_methods - ( with_caller => [ 'class_has' ] ); +Moose::Exporter->setup_import_methods( with_meta => ['class_has'] ); - -sub init_meta -{ +sub init_meta { shift; my %p = @_; - Moose->init_meta(%p); - - return - Moose::Util::MetaRole::apply_metaclass_roles - ( for_class => $p{for_class}, - metaclass_roles => [ 'MooseX::ClassAttribute::Role::Meta::Class' ], - ); + return Moose::Util::MetaRole::apply_metaclass_roles( + for => $p{for_class}, + class_metaroles => { + class => ['MooseX::ClassAttribute::Trait::Class'], + }, + role_metaroles => { + role => ['MooseX::ClassAttribute::Trait::Role'], + application_to_class => + ['MooseX::ClassAttribute::Trait::Application::ToClass'], + application_to_role => + ['MooseX::ClassAttribute::Trait::Application::ToRole'], + }, + ); } -sub class_has -{ - my $caller = shift; +sub class_has { + my $meta = shift; my $name = shift; my %options = @_; my $attrs = ref $name eq 'ARRAY' ? $name : [$name]; - Class::MOP::Class - ->initialize($caller) - ->add_class_attribute( $_, %options ) - for @{ $attrs }; + $meta->add_class_attribute( $_, %options ) for @{$attrs}; } 1; @@ -74,38 +76,38 @@ MooseX::ClassAttribute - Declare class attributes Moose-style My::Class->Cache()->{thing} = ...; - =head1 DESCRIPTION This module allows you to declare class attributes in exactly the same 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. The one exception is -the "required" flag, which is not allowed for class attributes. +overriding a parent's attributes, delegation (C), attribute traits, +etc. All features should just work. The one exception is the "required" flag, +which is not allowed for class attributes. 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. +the constructor will not set that attribute. =head1 FUNCTIONS This class exports one function when you use it, C. This works exactly like Moose's C, but it declares class attributes. -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. +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. Or you can just use L +instead. =head2 Implementation and Immutability This module will add a role to your class's metaclass, See -L for details. This role +L for details. This role provides introspection methods for class attributes. Class attributes themselves do the -L role. +L role. There is also a L which provides part of the inlining implementation for class @@ -115,7 +117,14 @@ attributes. 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. +tested to work with Moose's native traits. + +=head2 Class Attributes in Roles + +You can add a class attribute to a role. When that role is applied to a class, +the class will have the relevant class attributes added. Note that attribute +defaults will be calculated when the class attribute is composed into the +class. =head1 DONATIONS @@ -151,7 +160,7 @@ automatically be notified of progress on your bug as I make changes. =head1 COPYRIGHT & LICENSE -Copyright 2007-2008 Dave Rolsky, All Rights Reserved. +Copyright 2007-2010 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.