update pod for all modules
[gitmo/MooseX-ClassAttribute.git] / lib / MooseX / ClassAttribute / Trait / Role.pm
1 package MooseX::ClassAttribute::Trait::Role;
2
3 use strict;
4 use warnings;
5
6 use MooseX::ClassAttribute::Meta::Role::Attribute;
7 use Scalar::Util qw( blessed );
8
9 use namespace::autoclean;
10 use Moose::Role;
11
12 with 'MooseX::ClassAttribute::Trait::Mixin::HasClassAttributes';
13
14 around add_class_attribute => sub {
15     my $orig = shift;
16     my $self = shift;
17     my $attr = (
18         blessed $_[0] && $_[0]->isa('Class::MOP::Mixin::AttributeCore')
19         ? $_[0]
20         : MooseX::ClassAttribute::Meta::Role::Attribute->new(@_)
21     );
22
23     $self->$orig($attr);
24
25     return $attr;
26 };
27
28 sub _attach_class_attribute {
29     my ( $self, $attribute ) = @_;
30
31     $attribute->attach_to_role($self);
32 }
33
34 1;
35
36 __END__
37
38 =pod
39
40 =head1 NAME
41
42 MooseX::ClassAttribute::Trait::Role - A trait for roles with class attributes
43
44 =head1 SYNOPSIS
45
46   for my $attr ( HasClassAttributes->meta()->get_all_class_attributes() )
47   {
48       print $attr->name();
49   }
50
51 =head1 DESCRIPTION
52
53 This role adds awareness of class attributes to a role metaclass object. It
54 provides a set of introspection methods that largely parallel the existing
55 attribute methods, except they operate on class attributes.
56
57 =head1 METHODS
58
59 Every method provided by this role has an analogous method in
60 C<Class::MOP::Class> or C<Moose::Meta::Class> for regular attributes.
61
62 =head2 $meta->has_class_attribute($name)
63
64 =head2 $meta->get_class_attribute($name)
65
66 =head2 $meta->get_class_attribute_list()
67
68 These methods are exactly like their counterparts in
69 L<MooseX::ClassAttribute::Trait::Class>.
70
71 =head2 $meta->add_class_attribute(...)
72
73 This accepts the same options as the L<Moose::Meta::Attribute>
74 C<add_attribute()> method. However, if an attribute is specified as
75 "required" an error will be thrown.
76
77 =head2 $meta->remove_class_attribute($name)
78
79 If the named class attribute exists, it is removed from the role.
80
81 =head1 AUTHOR
82
83 Dave Rolsky, C<< <autarch@urth.org> >>
84
85 =head1 BUGS
86
87 See L<MooseX::ClassAttribute> for details.
88
89 =head1 COPYRIGHT & LICENSE
90
91 Copyright 2007-2008 Dave Rolsky, All Rights Reserved.
92
93 This program is free software; you can redistribute it and/or modify
94 it under the same terms as Perl itself.
95
96 =cut