MooseX::ClassAttribute::Trait::Application::ToClass - A trait that supports applying class attributes to classes


MooseX-ClassAttribute documentation Contained in the MooseX-ClassAttribute distribution.

Index


Code Index:

NAME

Top

MooseX::ClassAttribute::Trait::Application::ToClass - A trait that supports applying class attributes to classes

VERSION

Top

version 0.26

DESCRIPTION

Top

This trait is used to allow the application of roles containing class attributes to classes.

BUGS

Top

See MooseX::ClassAttribute for details.

AUTHOR

Top

Dave Rolsky <autarch@urth.org>

COPYRIGHT AND LICENSE

Top


MooseX-ClassAttribute documentation Contained in the MooseX-ClassAttribute distribution.

package MooseX::ClassAttribute::Trait::Application::ToClass;
BEGIN {
  $MooseX::ClassAttribute::Trait::Application::ToClass::VERSION = '0.26';
}

use strict;
use warnings;

use namespace::autoclean;
use Moose::Role;

with 'MooseX::ClassAttribute::Trait::Application';

around apply => sub {
    my $orig = shift;
    my $self  = shift;
    my $role  = shift;
    my $class = shift;

    $class = Moose::Util::MetaRole::apply_metaroles(
        for             => $class,
        class_metaroles => {
            class => ['MooseX::ClassAttribute::Trait::Class'],
        },
    );

    $self->$orig( $role, $class );
};

sub _apply_class_attributes {
    my $self  = shift;
    my $role  = shift;
    my $class = shift;

    my $attr_metaclass = $class->attribute_metaclass();

    foreach my $attribute_name ( $role->get_class_attribute_list() ) {
        if (   $class->has_class_attribute($attribute_name)
            && $class->get_class_attribute($attribute_name)
            != $role->get_class_attribute($attribute_name) ) {
            next;
        }
        else {
            $class->add_class_attribute(
                $role->get_class_attribute($attribute_name)
                    ->attribute_for_class($attr_metaclass) );
        }
    }
}

1;

# ABSTRACT: A trait that supports applying class attributes to classes




__END__