Tidy all code
[gitmo/MooseX-ClassAttribute.git] / lib / MooseX / ClassAttribute / Trait / Application / ToClass.pm
CommitLineData
63fcc508 1package MooseX::ClassAttribute::Trait::Application::ToClass;
88b7f2c8 2
3use strict;
4use warnings;
5
6use namespace::autoclean;
7use Moose::Role;
8
63fcc508 9with 'MooseX::ClassAttribute::Trait::Application';
88b7f2c8 10
fb949f72 11around apply => sub {
3e9e5aef 12 my $orig = shift;
88b7f2c8 13 my $self = shift;
14 my $role = shift;
15 my $class = shift;
16
dbf3ee23 17 $class = Moose::Util::MetaRole::apply_metaroles(
88b7f2c8 18 for => $class,
19 class_metaroles => {
63fcc508 20 class => ['MooseX::ClassAttribute::Trait::Class'],
88b7f2c8 21 },
22 );
23
fb949f72 24 $self->$orig( $role, $class );
25};
26
27sub _apply_class_attributes {
28 my $self = shift;
29 my $role = shift;
30 my $class = shift;
31
88b7f2c8 32 my $attr_metaclass = $class->attribute_metaclass();
33
34 foreach my $attribute_name ( $role->get_class_attribute_list() ) {
35 if ( $class->has_class_attribute($attribute_name)
36 && $class->get_class_attribute($attribute_name)
37 != $role->get_class_attribute($attribute_name) ) {
38 next;
39 }
40 else {
41 $class->add_class_attribute(
42 $role->get_class_attribute($attribute_name)
43 ->attribute_for_class($attr_metaclass) );
44 }
45 }
46}
47
481;
04b89789 49
0d0bf8c3 50# ABSTRACT: A trait that supports applying class attributes to classes
51
04b89789 52__END__
53
54=pod
55
04b89789 56=head1 DESCRIPTION
57
58This trait is used to allow the application of roles containing class
59attributes to classes.
60
04b89789 61=head1 BUGS
62
63See L<MooseX::ClassAttribute> for details.
64
04b89789 65=cut