1 package MooseX::ClassAttribute::Trait::Application::ToRole;
8 use Moose::Util::MetaRole;
9 use MooseX::ClassAttribute::Trait::Application::ToClass;
10 use MooseX::ClassAttribute::Trait::Application::ToInstance;
12 use namespace::autoclean;
15 with 'MooseX::ClassAttribute::Trait::Application';
17 sub _apply_class_attributes {
22 $role2 = Moose::Util::MetaRole::apply_metaclass_roles(
25 role => ['MooseX::ClassAttribute::Trait::Role'],
26 application_to_class =>
27 ['MooseX::ClassAttribute::Trait::Application::ToClass'],
28 application_to_role =>
29 ['MooseX::ClassAttribute::Trait::Application::ToRole'],
30 application_to_instance => [
31 'MooseX::ClassAttribute::Trait::Application::ToInstance'
36 foreach my $attribute_name ( $role1->get_class_attribute_list() ) {
37 if ( $role2->has_class_attribute($attribute_name)
38 && $role2->get_class_attribute($attribute_name)
39 != $role1->get_class_attribute($attribute_name) ) {
42 Moose->throw_error( "Role '"
44 . "' has encountered a class attribute conflict "
45 . "during composition. This is fatal error and cannot be disambiguated."
49 $role2->add_class_attribute(
50 $role1->get_class_attribute($attribute_name)->clone() );
63 MooseX::ClassAttribute::Trait::Application::ToRole - A trait that supports applying class attributes to roles
67 This trait is used to allow the application of roles containing class
72 Dave Rolsky, C<< <autarch@urth.org> >>
76 See L<MooseX::ClassAttribute> for details.
78 =head1 COPYRIGHT & LICENSE
80 Copyright 2007-2008 Dave Rolsky, All Rights Reserved.
82 This program is free software; you can redistribute it and/or modify
83 it under the same terms as Perl itself.