1 package MooseX::ClassAttribute;
7 our $AUTHORITY = 'cpan:DROLSKY';
11 use MooseX::ClassAttribute::Role::Meta::Class;
12 use MooseX::ClassAttribute::Role::Meta::Attribute;
14 Moose::Exporter->setup_import_methods
15 ( with_caller => [ 'class_has' ] );
26 Moose::Util::MetaRole::apply_metaclass_roles
27 ( for_class => $p{for_class},
28 metaclass_roles => [ 'MooseX::ClassAttribute::Role::Meta::Class' ],
38 my $attrs = ref $name eq 'ARRAY' ? $name : [$name];
42 ->add_class_attribute( $_, %options )
54 MooseX::ClassAttribute - Declare class attributes Moose-style
61 use MooseX::ClassAttribute;
66 default => sub { {} },
69 __PACKAGE__->meta()->make_immutable();
72 no MooseX::ClassAttribute;
76 My::Class->Cache()->{thing} = ...;
81 This module allows you to declare class attributes in exactly the same
82 way as object attributes, using C<class_has()> instead of C<has()>.
84 You can use any feature of Moose's attribute declarations, including
85 overriding a parent's attributes, delegation (C<handles>), and
86 attribute metaclasses, and it should just work. The one exception is
87 the "required" flag, which is not allowed for class attributes.
89 The accessor methods for class attribute may be called on the class
90 directly, or on objects of that class. Passing a class attribute to
91 the constructor will not set it.
95 This class exports one function when you use it, C<class_has()>. This
96 works exactly like Moose's C<has()>, but it declares class attributes.
98 One little nit is that if you include C<no Moose> in your class, you
99 won't remove the C<class_has()> function. To do that you must include
100 C<no MooseX::ClassAttribute> as well.
102 =head2 Implementation and Immutability
104 This module will add a role to your class's metaclass, See
105 L<MooseX::ClassAttribute::Role::Meta::Class> for details. This role
106 provides introspection methods for class attributes.
108 Class attributes themselves do the
109 L<MooseX::ClassAttribute::Role::Meta::Attribute> role.
111 There is also a L<MooseX::ClassAttribute::Meta::Method::Accessor>
112 which provides part of the inlining implementation for class
115 =head2 Cooperation with Metaclasses and Traits
117 This module should work with most attribute metaclasses and traits,
118 but it's possible that conflicts could occur. This module has been
119 tested to work with C<MooseX::AttributeHelpers>.
123 Dave Rolsky, C<< <autarch@urth.org> >>
127 Please report any bugs or feature requests to
128 C<bug-moosex-classattribute@rt.cpan.org>, or through the web interface
129 at L<http://rt.cpan.org>. I will be notified, and then you'll
130 automatically be notified of progress on your bug as I make changes.
132 =head1 COPYRIGHT & LICENSE
134 Copyright 2007-2008 Dave Rolsky, All Rights Reserved.
136 This program is free software; you can redistribute it and/or modify
137 it under the same terms as Perl itself.