1 package MooseX::ClassAttribute::Trait::Application::ToRole;
6 use Moose::Util::MetaRole;
7 use MooseX::ClassAttribute::Trait::Application::ToClass;
9 use namespace::autoclean;
12 with 'MooseX::ClassAttribute::Trait::Application';
14 sub _apply_class_attributes {
19 $role2 = Moose::Util::MetaRole::apply_metaclass_roles(
22 role => ['MooseX::ClassAttribute::Trait::Role'],
23 application_to_class =>
24 ['MooseX::ClassAttribute::Trait::Application::ToClass'],
25 application_to_role =>
26 ['MooseX::ClassAttribute::Trait::Application::ToRole'],
30 foreach my $attribute_name ( $role1->get_class_attribute_list() ) {
31 if ( $role2->has_class_attribute($attribute_name)
32 && $role2->get_class_attribute($attribute_name)
33 != $role1->get_class_attribute($attribute_name) ) {
36 Moose->throw_error( "Role '"
38 . "' has encountered a class attribute conflict "
39 . "during composition. This is fatal error and cannot be disambiguated."
43 $role2->add_class_attribute(
44 $role1->get_class_attribute($attribute_name)->clone() );
51 # ABSTRACT: A trait that supports applying class attributes to roles
59 This trait is used to allow the application of roles containing class
64 See L<MooseX::ClassAttribute> for details.