run code through perltidy
[gitmo/MooseX-ClassAttribute.git] / lib / MooseX / ClassAttribute.pm
CommitLineData
4dee0fd3 1package MooseX::ClassAttribute;
2
4dee0fd3 3use strict;
54a288bd 4use warnings;
4dee0fd3 5
9b2bd146 6our $VERSION = '0.10';
0f24a39d 7our $AUTHORITY = 'cpan:DROLSKY';
8
8207dfe7 9use Moose 0.89 ();
bb70fe3a 10use Moose::Exporter;
11use MooseX::ClassAttribute::Role::Meta::Class;
0f24a39d 12
9b2bd146 13Moose::Exporter->setup_import_methods( with_meta => ['class_has'] );
a124b299 14
9b2bd146 15sub init_meta {
bb70fe3a 16 shift;
17 my %p = @_;
54a288bd 18
bb70fe3a 19 Moose->init_meta(%p);
8d655404 20
9b2bd146 21 return Moose::Util::MetaRole::apply_metaclass_roles(
22 for_class => $p{for_class},
23 class_metaroles => {
24 class => ['MooseX::ClassAttribute::Role::Meta::Class'],
25 },
26 role_metaroles => {
27 role => ['MooseX::ClassAttribute::Role::Meta::Role'],
28 },
29 );
8d655404 30}
31
9b2bd146 32sub class_has {
59ee60b4 33 my $meta = shift;
bb70fe3a 34 my $name = shift;
35 my %options = @_;
8d655404 36
bb70fe3a 37 my $attrs = ref $name eq 'ARRAY' ? $name : [$name];
54a288bd 38
9b2bd146 39 $meta->add_class_attribute( $_, %options ) for @{$attrs};
0f24a39d 40}
41
4dee0fd3 421;
43
44__END__
45
46=pod
47
48=head1 NAME
49
54a288bd 50MooseX::ClassAttribute - Declare class attributes Moose-style
4dee0fd3 51
4dee0fd3 52=head1 SYNOPSIS
53
54a288bd 54 package My::Class;
4dee0fd3 55
54a288bd 56 use Moose;
4dee0fd3 57 use MooseX::ClassAttribute;
58
54a288bd 59 class_has 'Cache' =>
60 ( is => 'rw',
61 isa => 'HashRef',
62 default => sub { {} },
63 );
64
65 __PACKAGE__->meta()->make_immutable();
54a288bd 66
67 no Moose;
68 no MooseX::ClassAttribute;
69
70 # then later ...
71
72 My::Class->Cache()->{thing} = ...;
73
74
75=head1 DESCRIPTION
76
77This module allows you to declare class attributes in exactly the same
169f4cc7 78way as object attributes, using C<class_has()> instead of C<has()>.
54a288bd 79
80You can use any feature of Moose's attribute declarations, including
81overriding a parent's attributes, delegation (C<handles>), and
169f4cc7 82attribute metaclasses, and it should just work. The one exception is
83the "required" flag, which is not allowed for class attributes.
54a288bd 84
169f4cc7 85The accessor methods for class attribute may be called on the class
7dc1418a 86directly, or on objects of that class. Passing a class attribute to
87the constructor will not set it.
88
54a288bd 89=head1 FUNCTIONS
90
91This class exports one function when you use it, C<class_has()>. This
92works exactly like Moose's C<has()>, but it declares class attributes.
93
170db2d9 94One little nit is that if you include C<no Moose> in your class, you
54a288bd 95won't remove the C<class_has()> function. To do that you must include
96C<no MooseX::ClassAttribute> as well.
97
98=head2 Implementation and Immutability
99
169f4cc7 100This module will add a role to your class's metaclass, See
101L<MooseX::ClassAttribute::Role::Meta::Class> for details. This role
102provides introspection methods for class attributes.
103
104Class attributes themselves do the
105L<MooseX::ClassAttribute::Role::Meta::Attribute> role.
4dee0fd3 106
169f4cc7 107There is also a L<MooseX::ClassAttribute::Meta::Method::Accessor>
108which provides part of the inlining implementation for class
109attributes.
4dee0fd3 110
169f4cc7 111=head2 Cooperation with Metaclasses and Traits
4dee0fd3 112
169f4cc7 113This module should work with most attribute metaclasses and traits,
114but it's possible that conflicts could occur. This module has been
115tested to work with C<MooseX::AttributeHelpers>.
4dee0fd3 116
7a4a3b1e 117=head1 DONATIONS
118
119If you'd like to thank me for the work I've done on this module,
120please consider making a "donation" to me via PayPal. I spend a lot of
121free time creating free software, and would appreciate any support
122you'd care to offer.
123
124Please note that B<I am not suggesting that you must do this> in order
125for me to continue working on this particular software. I will
126continue to do so, inasmuch as I have in the past, for as long as it
127interests me.
128
129Similarly, a donation made in this way will probably not make me work
130on this software much more, unless I get so many donations that I can
131consider working on free software full time, which seems unlikely at
132best.
133
134To donate, log into PayPal and send money to autarch@urth.org or use
135the button on this page:
136L<http://www.urth.org/~autarch/fs-donation.html>
137
4dee0fd3 138=head1 AUTHOR
139
140Dave Rolsky, C<< <autarch@urth.org> >>
141
142=head1 BUGS
143
54a288bd 144Please report any bugs or feature requests to
145C<bug-moosex-classattribute@rt.cpan.org>, or through the web interface
146at L<http://rt.cpan.org>. I will be notified, and then you'll
147automatically be notified of progress on your bug as I make changes.
4dee0fd3 148
149=head1 COPYRIGHT & LICENSE
150
169f4cc7 151Copyright 2007-2008 Dave Rolsky, All Rights Reserved.
4dee0fd3 152
153This program is free software; you can redistribute it and/or modify
154it under the same terms as Perl itself.
155
156=cut